From c54fb6a88876be994906d57d2d18e844686964d0 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 01 七月 2020 14:16:13 +0800 Subject: [PATCH] rcoketmq集中管理 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java | 805 +++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 529 insertions(+), 276 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java index 7807105..cb1a78c 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java @@ -8,9 +8,11 @@ import javax.annotation.Resource; +import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.BigDecimalUtil; +import org.yeshi.utils.taobao.TbImgUtil; import com.aliyun.openservices.ons.api.Message; import com.aliyun.openservices.ons.api.Producer; @@ -55,8 +57,11 @@ import com.yeshi.fanli.service.inter.goods.CommonGoodsService; import com.yeshi.fanli.service.inter.goods.ShareGoodsService; import com.yeshi.fanli.service.inter.goods.ShareGoodsTextTemplateService; +import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService; +import com.yeshi.fanli.service.inter.msg.UserSystemMsgService; import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; +import com.yeshi.fanli.service.inter.push.PushService; import com.yeshi.fanli.service.inter.user.QrCodeService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoService; @@ -68,9 +73,11 @@ import com.yeshi.fanli.service.inter.user.cloud.UserCloudService; import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; import com.yeshi.fanli.service.manger.goods.ConvertLinkManager; +import com.yeshi.fanli.service.manger.msg.RocketMQManager; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.ImageToBase64; import com.yeshi.fanli.util.MoneyBigDecimalUtil; +import com.yeshi.fanli.util.RedisKeyEnum; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.aitaoker.AitaokerApiUtil; @@ -103,62 +110,73 @@ @Resource private ConvertLinkManager convertLinkManager; - + @Resource private UserCloudGoodsService userCloudGoodsService; - + @Resource private UserInfoExtraService userInfoExtraService; - + @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; - + @Resource private UserInfoService userInfoService; - + @Resource private ShareGoodsService shareGoodsService; - + @Resource private ConfigService configService; - + @Resource private JDGoodsCacheUtil jdGoodsCacheUtil; - + @Resource private PinDuoDuoCacheUtil pinDuoDuoCacheUtil; - + @Resource private QrCodeService qrCodeService; - + @Resource private RedisManager redisManager; - + @Resource private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService; - + @Resource private HongBaoManageService hongBaoManageService; - + @Resource private ShareGoodsTextTemplateService shareGoodsTextTemplateService; - + @Resource private CommonGoodsService commonGoodsService; - + @Resource private UserCloudSendRecordService userCloudSendRecordService; - + @Resource private UserCloudSendContentService userCloudSendContentService; - + @Resource private UserCloudManageService userCloudManageService; - - @Resource(name = "producer") - private Producer producer; - - + + @Resource + private RocketMQManager rocketMQManager; + + @Resource + private UserOtherMsgNotificationService userOtherMsgNotificationService; + + @Resource + private PushService pushService; + + @Resource + private UserSystemMsgService userSystemMsgService; + + @Resource(name = "taskExecutor") + private TaskExecutor executor; + @Override public UserCloud getValidByUid(Long uid) { return userCloudMapper.getValidByUid(uid); @@ -174,13 +192,12 @@ Long count = userCloudMapper.countByUid(uid); return count; } - - + @Override - public List<UserCloud> query(int page, int count,String key, Integer state) { - return userCloudMapper.query((page-1)* count, count, key, state); + public List<UserCloud> query(int page, int count, String key, Integer state) { + return userCloudMapper.query((page - 1) * count, count, key, state); } - + @Override public long count(String key, Integer state) { Long count = userCloudMapper.count(key, state); @@ -196,6 +213,14 @@ if (userCloud == null) throw new UserCloudException(1, "浜戝彂鍗曞凡杩囨湡"); + // 妫�娴嬫槸鍚﹂渶瑕佹洿鏂� - 1鍒嗛挓闂撮殧 + String key = "cloudLogin_" + uid; + String result = redisManager.getCommonString(key); + if (!StringUtil.isNullOrEmpty(result)) { + return; + } + redisManager.cacheCommonString(key, "true", 60); + // 鏇存柊淇℃伅 UserCloud update = new UserCloud(); update.setId(userCloud.getId()); @@ -203,6 +228,23 @@ update.setWxName(wxName); update.setWxPortrait(wxPortrait); userCloudMapper.updateByPrimaryKeySelective(update); + + try { + userOtherMsgNotificationService.cloudMsg(uid, "浜戝彂鍗曞井淇¤处鍙�", "寰俊璐﹀彿鐧诲綍鎴愬姛", "鍙互寮�鍚綘鐨勭兢鍙戝崟浜�"); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + + // 鏇存柊鎻愰啋鐘舵�� + UserCloudManage cloudManage = userCloudManageService.selectForUpdate(uid); + if (cloudManage == null) { + userCloudManageService.save(uid, false, false); + } else { + UserCloudManage updateManage = new UserCloudManage(); + updateManage.setId(uid); + updateManage.setOfflineNotice(false); + userCloudManageService.updateByPrimaryKeySelective(updateManage); + } // 寰俊鍙峰彉鍖�-娓呯┖缇や俊鎭� if (!wxId.equals(userCloud.getWxId())) { @@ -216,7 +258,6 @@ } @Override - @Transactional(rollbackFor = Exception.class) public void openCloud(Long uid, Long orderId, CloudOrderMenuEnum menuEnum) throws UserCloudException { UserCloud existCloud = userCloudMapper.getByOrderId(orderId); if (existCloud != null) { @@ -230,7 +271,7 @@ if (userCloud.getEndTime().getTime() > java.lang.System.currentTimeMillis()) renew = true; // 楠岃瘉濂楅鏄惁鐩稿悓 - if (renew && userCloud.getRobotType() != menuEnum.getType()) { + if (renew && userCloud.getRobotType() != menuEnum.getRobotType()) { LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]宸叉湁鍏朵粬浜戝彂鍗曞椁愯繕鏈粨鏉�"); throw new UserCloudException(1, "宸叉湁鍏朵粬浜戝彂鍗曞椁愯繕鏈粨鏉�"); } @@ -239,19 +280,22 @@ RobotInfoDTO dto = null; if (renew) { // 缁垂 dto = AitaokerApiUtil.robotRenewals(userCloud.getRobotId(), menuEnum.getMonth()); - } else { - dto = AitaokerApiUtil.robotCreate(menuEnum.getMonth(), menuEnum.getType(), "wechatrobot", null); + } else { // 鍒涘缓鏈哄櫒浜� + dto = AitaokerApiUtil.robotCreate(menuEnum.getMonth(), menuEnum.getRobotType(), "wechatrobot", null); } if (dto == null) { - LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]鏈哄櫒浜哄け璐ワ細 杩斿洖绌哄��"); - throw new UserCloudException(1, "鏈哄櫒浜鸿幏鍙栧け璐�"); + LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]鏈哄櫒浜哄け璐ワ細 鏈哄櫒浜哄垱寤哄け璐�"); + } + + Integer robotId = dto.getId(); + if (robotId == null) { + LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]鏈哄櫒浜哄け璐ワ細 鏈哄櫒浜篒D杩斿洖涓虹┖"); } String endTimeStr = dto.getEndTime(); if (StringUtil.isNullOrEmpty(endTimeStr)) { LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]鏈哄櫒浜哄け璐ワ細 杩斿洖鏃堕棿涓虹┖"); - throw new UserCloudException(1, "鏈哄櫒浜鸿繑鍥炴椂闂翠负绌�"); } long endTime = 0; @@ -259,19 +303,11 @@ endTime = Long.parseLong(endTimeStr); } catch (Exception e) { LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]鏈哄櫒浜哄け璐ワ細 杩斿洖鏃堕棿鏍煎紡涓嶆纭�"); - throw new UserCloudException(1, "鏈哄櫒浜鸿繑鍥炴椂闂存牸寮忎笉姝g‘"); - } - - Integer robotId = dto.getId(); - if (robotId == null) { - LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]鏈哄櫒浜哄け璐ワ細 鏈哄櫒浜篒D杩斿洖涓虹┖"); - throw new UserCloudException(1, "鏈哄櫒浜篒D杩斿洖涓虹┖"); } Integer groupNum = dto.getGroupNum(); if (groupNum == null) { LogHelper.cloudInfo("鏂规硶openCloud: [uid=" + uid + "][璁㈠崟ID=" + orderId + "]鏈哄櫒浜哄け璐ワ細 groupNum杩斿洖涓虹┖"); - throw new UserCloudException(1, "groupNum杩斿洖涓虹┖"); } UserCloud newCloud = new UserCloud(); @@ -279,8 +315,11 @@ newCloud.setOrderId(orderId); newCloud.setGroupNum(groupNum); newCloud.setRobotId(robotId); - newCloud.setRobotType(menuEnum.getType()); + newCloud.setRobotType(menuEnum.getRobotType()); if (renew) { + newCloud.setWxId(userCloud.getWxId()); + newCloud.setWxName(userCloud.getWxName()); + newCloud.setWxPortrait(userCloud.getPortrait()); newCloud.setStartTime(userCloud.getStartTime()); } else { newCloud.setStartTime(new Date()); @@ -288,9 +327,22 @@ newCloud.setEndTime(new Date(endTime * 1000)); // Unix 杞崲 鏅�氭椂闂� newCloud.setCreateTime(new Date()); userCloudMapper.insertSelective(newCloud); - + // 寮�鍚彂鍦堝姛鑳� userCloudManageService.save(uid, null, null); + + try { + String item = null; + if (renew) { + item = "鎴愬姛缁垂" + menuEnum.getDescShow(); + } else { + item = "鎴愬姛寮�閫�" + menuEnum.getDescShow(); + } + String desc = "瀹屾垚鍏呭�兼敮浠�" + BigDecimal.valueOf(menuEnum.getMoney()).setScale(2, BigDecimal.ROUND_DOWN) + "鍏�"; + userOtherMsgNotificationService.cloudMsg(uid, "浜戝彂鍗曞厖鍊�", item, desc); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } } @Override @@ -303,21 +355,38 @@ if (robotId == null) throw new UserCloudException(1, "浜戝彂鍗曟満鍣ㄤ汉涓嶅瓨鍦�"); - List<WeiXinGroupDTO> list = AitaokerApiUtil.getContract(robotId); + List<String> list = AitaokerApiUtil.getContract(robotId); if (list == null || list.size() == 0) throw new UserCloudException(1, "鏈绱㈠埌瀵瑰簲缇�"); - for (WeiXinGroupDTO dto : list) { - userCloudGroupService.addGroup(uid, dto.getGroupId(), dto.getGroupName(), userCloud.getGroupNum()); + String wxId = userCloud.getWxId(); + for (String roomId : list) { + String key = RedisKeyEnum.cloudMatchGroup.getKey() + StringUtil.Md5(wxId + "_" + roomId); + String result = redisManager.getCommonString(key); + if (!StringUtil.isNullOrEmpty(result)) { + String groupName = null; + WeiXinGroupDTO groupDetail = AitaokerApiUtil.getGroupDetail(robotId, roomId); + if (groupDetail != null) { + groupName = groupDetail.getGroupName(); + } + userCloudGroupService.addGroup(uid, roomId, groupName, userCloud.getGroupNum()); + } } } - + @Override - public void sendByDynamic(Long uid, String id) throws UserCloudException{ + public void cacheMatchGroup(String wxId, String groupId) { + if (StringUtil.isNullOrEmpty(wxId) || StringUtil.isNullOrEmpty(groupId)) + return; + String key = RedisKeyEnum.cloudMatchGroup.getKey() + StringUtil.Md5(wxId + "_" + groupId); + redisManager.cacheCommonString(key, "true", 60 * 20); + } + + @Override + public void sendByDynamic(Long uid, String id) throws UserCloudException { sendCircleByDynamic(uid, id, UserCloudSendRecord.SEND_WAY_MANUAL); } - - + @Override @Transactional(rollbackFor = Exception.class) public void autoSendByDynamic(Long uid, String id) { @@ -327,19 +396,19 @@ if (cloudManage.getOfficial() != null) official = cloudManage.getOfficial(); } - + if (!official) return; - + try { sendCircleByDynamic(uid, id, UserCloudSendRecord.SEND_WAY_AUTO); } catch (UserCloudException e) { - LogHelper.cloudInfo("autoSendByDynamic - [uid:" +uid + " 鍔ㄦ�乮d:"+ id + "]鍘熷洜锛�"+ e.getMsg()); + LogHelper.cloudInfo("autoSendByDynamic - [uid:" + uid + " 鍔ㄦ�乮d:" + id + "]鍘熷洜锛�" + e.getMsg()); } } - private void sendCircleByDynamic(Long uid, String id, int way) throws UserCloudException { + long time1= java.lang.System.currentTimeMillis(); UserInfo user = userInfoService.getUserByIdWithMybatis(uid); if (user == null) throw new UserCloudException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); @@ -347,7 +416,7 @@ if (user != null && user.getState() != UserInfo.STATE_NORMAL) { throw new UserCloudException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); } - + String inviteCode = userInfoExtraService.getInviteCodeByUid(uid); if (StringUtil.isNullOrEmpty(inviteCode)) throw new UserCloudException(3, "閭�璇风爜鏈縺娲�"); @@ -361,6 +430,9 @@ if (StringUtil.isNullOrEmpty(relationId)) throw new UserCloudException(2, "娣樺疂鏈巿鏉冿紝璇峰墠寰�\"鎴戠殑\"缁戝畾娣樺疂璐﹀彿"); + long time2= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByDynamic淇濋獙璇佺敤鎴风姸鎬侊細" + (time2 - time1)); + // 楠岃瘉鏄惁寮�閫� UserCloud userCloud = userCloudMapper.getValidByUid(uid); @@ -372,8 +444,12 @@ throw new UserCloudException(1002, "浜戝彂鍗曟満鍣ㄤ汉涓嶅瓨鍦�"); String wxId = userCloud.getWxId(); - if (StringUtil.isNullOrEmpty(wxId)) + if (StringUtil.isNullOrEmpty(wxId)) throw new UserCloudException(1003, "寰俊鍙蜂笉瀛樺湪锛岃鍏堝井淇$櫥褰�"); + + long time3= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByDynamic楠岃瘉鏄惁婊¤冻寮�閫氾細" + (time3 - time2)); + // 楠岃瘉寮�鍚姸鎬� List<UserCloudGroup> listGroup = userCloudGroupService.listByUid(uid); @@ -388,7 +464,9 @@ } if (listOpen.size() == 0) throw new UserCloudException(1005, "璇峰厛寮�鍚簯鍙戝崟缇ゅ姛鑳�"); - + + long time4= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByDynamic楠岃瘉鏄惁寮�鍚細" + (time4 - time3)); // 楠岃瘉鍙戝湀鏄惁鍙 GoodsEvaluate evaluate = goodsEvaluateService.getById(id); @@ -403,11 +481,19 @@ if (comments == null || comments.size() == 0) throw new UserCloudException(1, "璇ュ唴瀹逛笉鑳借浆閾�"); + long time5= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByDynamic楠岃瘉鍙戝湀鍐呭鏄惁婊¤冻锛�" + (time5 - time4)); + // 妫�娴嬪井淇℃槸鍚︾櫥褰曠姸鎬� if (!AitaokerApiUtil.onlineCheck(robotId)) { - throw new UserCloudException(1003, "璇烽噸鏂扮櫥褰曞井淇�"); + // 閫氱煡鐧诲綍寰俊 + offlineNotification(uid); + + throw new UserCloudException(1003, "寰俊宸叉帀绾匡紝闇�瑕侀噸鏂版壂鎻忎簩缁寸爜鐧诲綍"); } - + + long time6= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByDynamic楠岃瘉鍙戞槸鍚︾櫥褰曪細" + (time6 - time5)); boolean hasToken = false; List<String> listComment = new ArrayList<>(); @@ -440,19 +526,27 @@ } comment = comment.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n"); } - + listComment.add(comment); } if (!hasToken) throw new UserCloudException(1, "璇ュ唴瀹瑰寘鍚彲杞摼鍙d护鎴栭摼鎺�"); + // 寮傛鎵ц鍙戦�� + executor.execute(new Runnable() { + @Override + public void run() { + sendEvaluate(uid, evaluate, way, userCloud, listOpen, listComment); + } + }); + } - String qrCode = null; - String cloudPic = null; + private void sendEvaluate(Long uid, GoodsEvaluate evaluate, int way, UserCloud userCloud, + List<UserCloudGroup> listOpen, List<String> listComment) { ImgInfo imgVideo = null; List<String> listImg = new ArrayList<>(); - + List<ImgInfo> imgs = evaluate.getImgList(); if (imgs != null && imgs.size() > 0) { for (ImgInfo imgInfo : imgs) { @@ -460,81 +554,66 @@ imgVideo = imgInfo; continue; } - - if (imgInfo.getType() == ImgEnum.goods) { - cloudPic = imgInfo.getUrl(); - } listImg.add(imgInfo.getUrl()); - - // 鍙栨秷浜岀淮鐮佸浘 -// GoodsDetailVO goodsVO = imgInfo.getGoodsVO(); -// if (goodsVO == null) { -// listImg.add(imgInfo.getUrl()); -// } else { -// String jumpLink = getJumpLink(goodsVO, user, relationId, inviteCode, imgInfo.getUrl()); -// if (!StringUtil.isNullOrEmpty(jumpLink)) { -// qrCode = jumpLink; -// } -// } - } - - if (cloudPic == null) { - cloudPic = imgs.get(0).getUrl(); } } - + String wxId = userCloud.getWxId(); + Integer robotId = userCloud.getRobotId(); // 淇濆瓨鍙戦�佽褰� UserCloudSendRecord sendRecord = new UserCloudSendRecord(); sendRecord.setUid(uid); - sendRecord.setSendId(id); + sendRecord.setSendId(evaluate.getId()); sendRecord.setSendWay(way); sendRecord.setWxId(wxId); sendRecord.setRobotId(robotId); sendRecord.setSendTime(new Date()); - sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_STORE); + sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_EVALUATE); UserCloudSendRecord result = userCloudSendRecordService.save(sendRecord); String pid = result.getId(); + - for (UserCloudGroup cloudGroup: listOpen) { + for (UserCloudGroup cloudGroup : listOpen) { String title = evaluate.getTitle(); - + UserCloudSendContent sendContent = new UserCloudSendContent(); sendContent.setPid(pid); sendContent.setUid(uid); sendContent.setGroupId(cloudGroup.getGroupId()); sendContent.setCreateTime(new Date()); - - if(cloudGroup.getType() == UserCloudGroup.TYPE_CIRCLE) { // 鏈嬪弸鍦� + + if (cloudGroup.getType() == UserCloudGroup.TYPE_CIRCLE) { // 鏈嬪弸鍦� String circleId = null; sendContent.setType(UserCloudSendContent.TYPE_CIRCLE); - + if (imgVideo == null) { + + // 鍙戦�佸浘鏂� String picUrl = ""; - if (!StringUtil.isNullOrEmpty(qrCode)) - picUrl += qrCode; - if (listImg.size() > 0) { - for (String img: listImg) { - picUrl += "," + img; + for (String img : listImg) { + picUrl += img + ";"; } + if (picUrl.endsWith(";")) + picUrl = picUrl.substring(0, picUrl.length() - 1); } + String picUrlUpload = AitaokerApiUtil.macsendUpload(robotId, picUrl); + sendContent.setPicUrlUpload(picUrlUpload); sendContent.setTitle(title); sendContent.setPicUrl(picUrl); - // 鍙戦�佸浘鏂� - circleId = AitaokerApiUtil.macsendCircle(robotId, title, picUrl); + circleId = AitaokerApiUtil.macsendCircle(robotId, title, picUrlUpload); } else { + // 鍙戦�佽棰� sendContent.setPicUrl(imgVideo.getUrl()); sendContent.setVideoUrl(imgVideo.getVideoUrl()); - // 鍙戦�佽棰� circleId = AitaokerApiUtil.macsendCircleVideo(robotId, imgVideo.getVideoUrl(), imgVideo.getUrl()); } - + // 璇勮鏂囨湰 if (!StringUtil.isNullOrEmpty(circleId)) { sendContent.setState(true); List<String> list = new ArrayList<>(); - for (String comment: listComment) { + for (String comment : listComment) { boolean macsend = AitaokerApiUtil.macsendCircleComment(robotId, wxId, circleId, comment); if (macsend) { list.add(comment); @@ -544,29 +623,37 @@ } } else { // 缇� sendContent.setType(UserCloudSendContent.TYPE_GROUP); - + // 鍙戦�佹枃鏈� if (!StringUtil.isNullOrEmpty(title)) { boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), title); if (macsend) sendContent.setTitle(title); } - + // 鍙戦�佸浘鐗� - if (!StringUtil.isNullOrEmpty(cloudPic)) { - try { - String imgBase64 = ImageToBase64.NetImageToBase64(cloudPic); - boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), imgBase64); - if (macsend) - sendContent.setPicUrl(cloudPic); - } catch (Exception e) { - LogHelper.errorDetailInfo(e); - } + int num = 1; + String picNum = configService.get(ConfigKeyEnum.robotCloudGroupPictureNum.getKey()); + if (!StringUtil.isNullOrEmpty(picNum)) { + num = Integer.parseInt(picNum); } - + + if (listImg.size() > 0) + for (int i = 0; i < num && i < listImg.size(); i++) { + try { + String imgBase64 = ImageToBase64.NetImageToBase64(listImg.get(i)); + boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), + imgBase64); + if (macsend) + sendContent.setPicUrl(listImg.get(i)); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + } + // 璇勮鏂囨湰 List<String> list = new ArrayList<>(); - for (String comment: listComment) { + for (String comment : listComment) { boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), comment); if (macsend) { list.add(comment); @@ -580,10 +667,11 @@ } + @Override @Transactional(rollbackFor = Exception.class) - public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType, Long sellerId) throws UserCloudException{ - sendCircleByGoods(uid, goodsId, goodsType, null, sellerId); + public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType, Long sellerId) throws UserCloudException { + sendCircleByGoods(uid, goodsId, goodsType, null, sellerId, UserCloudSendRecord.SEND_WAY_MANUAL); } @Override @@ -595,28 +683,32 @@ if (cloudManage.getCustom() != null) custom = cloudManage.getCustom(); } - + if (!custom) { return; } - + UserCloudGoods cloudGoods = userCloudGoodsService.selectByPrimaryKey(id); if (cloudGoods == null) { return; } CommonGoods cgoods = cloudGoods.getCommonGoods(); - if (cgoods == null) + if (cgoods == null) return; - + try { // 鍙戦�佸晢鍝� - sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id, cgoods.getSellerId()); + sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id, cgoods.getSellerId(), + UserCloudSendRecord.SEND_WAY_AUTO); } catch (UserCloudException e) { - LogHelper.cloudInfo("autoSendCustomGoods - [uid:" +uid + " 搴搃d:"+ id + "]鍘熷洜锛�"+ e.getMsg()); + LogHelper.cloudInfo("autoSendCustomGoods - [uid:" + uid + " 搴搃d:" + id + "]鍘熷洜锛�" + e.getMsg()); } } - private void sendCircleByGoods(Long uid, Long goodsId, Integer goodsType, Long storeId, Long sellerId) throws UserCloudException { + private void sendCircleByGoods(Long uid, Long goodsId, Integer goodsType, Long storeId, Long sellerId, int way) + throws UserCloudException { + long begainTime = java.lang.System.currentTimeMillis(); + // 楠岃瘉鏄惁鎺堟潈 UserInfo user = userInfoService.getUserByIdWithMybatis(uid); if (user == null) @@ -625,7 +717,7 @@ if (user != null && user.getState() != UserInfo.STATE_NORMAL) { throw new UserCloudException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); } - + String inviteCode = userInfoExtraService.getInviteCodeByUid(uid); if (StringUtil.isNullOrEmpty(inviteCode)) throw new UserCloudException(3, "閭�璇风爜鏈縺娲�"); @@ -639,24 +731,34 @@ if (StringUtil.isNullOrEmpty(relationId)) throw new UserCloudException(2, "娣樺疂鏈巿鏉冿紝璇峰墠寰�\"鎴戠殑\"缁戝畾娣樺疂璐﹀彿"); + long time2 = java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByGoods楠岃瘉鐢ㄦ埛鑰楁椂锛�" + (time2 - begainTime)); + + // 楠岃瘉鏄惁寮�閫� UserCloud userCloud = userCloudMapper.getValidByUid(uid); if (userCloud == null) throw new UserCloudException(1001, "浜戝彂鍗曞凡杩囨湡"); - + long time3= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByGoods楠岃瘉鏄惁寮�閫氾細" + (time3 - time2)); + + long time4 = time3; // 鍔犲叆鎴戠殑澶囬�夊簱 if (storeId == null) { try { UserCloudGoods cloudGoods = userCloudGoodsService.addGoods(uid, goodsId, goodsType, sellerId); if (cloudGoods != null) - storeId =cloudGoods.getId(); + storeId = cloudGoods.getId(); } catch (UserCloudGoodsException e) { - LogHelper.cloudInfo("sendCustomGoods - [uid:" +uid + "goodsId:"+ goodsId + "goodsType" + goodsType +"]鍘熷洜锛�"+ e.getMsg()); + LogHelper.cloudInfo("sendCustomGoods - [uid:" + uid + "goodsId:" + goodsId + "goodsType" + goodsType + + "]鍘熷洜锛�" + e.getMsg()); throw new UserCloudException(1, "鍔犲叆浜戝彂鍗曞閫夊簱澶辫触"); } + time4= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByGoods鍔犲叆澶囬�夊簱锛�" + (time4 - time3)); } - + // 鑷�夊簱鍟嗗搧鏄惁鎵撳紑 boolean custom = false; UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid); @@ -665,38 +767,45 @@ custom = cloudManage.getCustom(); } if (!custom) { - throw new UserCloudException(0, "鎴愬姛鍔犲叆浜戝彂鍗曞簱"); + return; } - + Integer robotId = userCloud.getRobotId(); if (robotId == null) throw new UserCloudException(1, "浜戝彂鍗曟満鍣ㄤ汉涓嶅瓨鍦�"); String wxId = userCloud.getWxId(); - if (StringUtil.isNullOrEmpty(wxId)) + if (StringUtil.isNullOrEmpty(wxId)) throw new UserCloudException(1002, "璇峰厛鐧诲綍寰俊"); - + // 楠岃瘉寮�鍚姸鎬� List<UserCloudGroup> listGroup = userCloudGroupService.listByUid(uid); if (listGroup == null || listGroup.size() == 0) throw new UserCloudException(1003, "璇峰厛鐧诲綍寰俊"); + long time5= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByGoods楠岃瘉鏄惁缁戝畾寰俊锛�" + (time5 - time4)); + List<UserCloudGroup> listOpen = new ArrayList<>(); for (UserCloudGroup cloudGrou : listGroup) { if (cloudGrou.getState()) { listOpen.add(cloudGrou); } } - + if (listOpen.size() == 0) throw new UserCloudException(1004, "璇峰厛寮�鍚簯鍙戝崟缇ゅ姛鑳�"); - - + // 妫�娴嬪井淇℃槸鍚︾櫥褰曠姸鎬� if (!AitaokerApiUtil.onlineCheck(robotId)) { - throw new UserCloudException(1003, "璇烽噸鏂扮櫥褰曞井淇�"); + // 閫氱煡鐧诲綍寰俊 + offlineNotification(uid); + + throw new UserCloudException(1003, "寰俊宸叉帀绾匡紝闇�瑕侀噸鏂版壂鎻忎簩缁寸爜鐧诲綍"); } - + + long time6= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByGoods楠岃瘉鏄惁鐧诲綍寰俊锛�" + (time6 - time5)); // 淇濆瓨鍙戦�佽褰� UserCloudSendRecord sendRecord = new UserCloudSendRecord(); @@ -715,31 +824,50 @@ } UserCloudSendRecord result = userCloudSendRecordService.save(sendRecord); - if (goodsType == Constant.SOURCE_TYPE_TAOBAO) { - sendTaoBaoGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); - } else if (goodsType == Constant.SOURCE_TYPE_JD) { - sendJDGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); - } else if (goodsType == Constant.SOURCE_TYPE_PDD) { - sendPDDGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); - } else if (goodsType == Constant.SOURCE_TYPE_VIP) { - sendVIPGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); - } else if (goodsType == Constant.SOURCE_TYPE_SUNING) { - sendSuNingGoods(user, robotId, wxId, goodsId, sellerId, relationId, listOpen, result.getId()); + long time7= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByGoods淇濆瓨鍙戦�佽褰曪細" + (time7 - time6)); + + try { + if (goodsType == Constant.SOURCE_TYPE_TAOBAO) { + sendTaoBaoGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); + } else if (goodsType == Constant.SOURCE_TYPE_JD) { + sendJDGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); + } else if (goodsType == Constant.SOURCE_TYPE_PDD) { + sendPDDGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); + } else if (goodsType == Constant.SOURCE_TYPE_VIP) { + sendVIPGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId()); + } else if (goodsType == Constant.SOURCE_TYPE_SUNING) { + sendSuNingGoods(user, robotId, wxId, goodsId, sellerId, relationId, listOpen, result.getId()); + } + // 鏇存柊鍙戝崟璁板綍 + if (storeId != null) { + UserCloudGoods record = new UserCloudGoods(); + record.setId(storeId); + record.setState(UserCloudGoods.STATE_SHARED); + record.setSendTime(new Date()); + record.setUpdateTime(new Date()); + userCloudGoodsService.updateByPrimaryKeySelective(record); + } + long time8= java.lang.System.currentTimeMillis(); + LogHelper.test("sendCircleByGoods鎵ц鍙戦�侊細" + (time8 - time7)); + } catch (UserCloudException e) { + LogHelper.cloudInfo("autoSendCustomGoods - [uid:" + uid + " 搴搃d:" + storeId + "]鍘熷洜锛�" + e.getMsg()); + // 鏇存柊鍙戝崟璁板綍 + if (storeId != null) { + UserCloudGoods record = new UserCloudGoods(); + record.setId(storeId); + record.setState(UserCloudGoods.STATE_INVALID); + record.setSendTime(new Date()); + record.setUpdateTime(new Date()); + userCloudGoodsService.updateByPrimaryKeySelective(record); + } } - - // 鏇存柊鍙戝崟璁板綍 - if (storeId != null) { - UserCloudGoods record = new UserCloudGoods(); - record.setId(storeId); - record.setState(UserCloudGoods.STATE_SHARED); - record.setSendTime(new Date()); - record.setUpdateTime(new Date()); - userCloudGoodsService.updateByPrimaryKeySelective(record); - } + } - + /** * 娣樺疂鍟嗗搧淇℃伅澶勭悊 + * * @param user * @param inviteCode * @param robotId @@ -749,7 +877,7 @@ * @param listOpen * @throws UserCloudException */ - private void sendTaoBaoGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, + private void sendTaoBaoGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, List<UserCloudGroup> listOpen, String pid) throws UserCloudException { TaoBaoLink taoBaoLink = null; try { @@ -760,13 +888,13 @@ } if (taoBaoLink == null) throw new UserCloudException(1, "璇ュ晢鍝佸凡涓嬫灦"); - + TaoBaoGoodsBrief goods = taoBaoLink.getGoods(); boolean coupon = false; if (!StringUtil.isNullOrEmpty(goods.getCouponInfo())) { coupon = true; } - + String quanPrice = ""; String description = ""; String couponAmount = ""; @@ -776,21 +904,26 @@ couponAmount = MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()).toString(); } String sales = TaoBaoUtil.getSaleCount(goods.getBiz30day()); - + // 鑾峰彇鎺ㄨ崘璇� - String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getTitle(), sales, + String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getTitle(), sales, couponAmount, description); // 鑾峰彇璇勮璇� String commentText = shareGoodsTextTemplateService.getCommentTextByTaoToken(coupon, taoBaoLink.getTaoToken(), goods.getZkPrice().toString(), quanPrice); - - // 浜戝彂鍗� - sendGoods(robotId, wxId, listOpen, recommendText, commentText, goods.getImgList(), user.getId(), pid); + + // 寮傛鎵ц鍙戦�� + executor.execute(new Runnable() { + @Override + public void run() { + sendGoods(robotId, wxId, listOpen, recommendText, commentText, goods.getImgList(), user.getId(), pid); + } + }); } - - + /** * 浜笢鍟嗗搧浜戝彂鍗� + * * @param user * @param robotId * @param wxId @@ -799,39 +932,39 @@ * @param listOpen * @throws UserCloudException */ - private void sendJDGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, + private void sendJDGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, List<UserCloudGroup> listOpen, String pid) throws UserCloudException { JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId); if (jdGoods == null) throw new UserCloudException(1, "璇ュ晢鍝佸凡涓嬫灦"); - - + String couponUrl = null; JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods); if (couponInfo != null) { couponUrl = couponInfo.getLink(); } String materialId = "https://item.jd.com/" + goodsId + ".html"; - String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",user.getId() + ""); - + String jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "", + user.getId() + ""); + boolean coupon = false; if (couponInfo != null) { coupon = true; } - + String quanPrice = ""; String couponAmount = ""; if (coupon) { quanPrice = BigDecimalUtil.getWithNoZera(JDUtil.getQuanPrice(jdGoods)).toString() + ""; couponAmount = BigDecimalUtil.getWithNoZera(couponInfo.getDiscount()).toString(); } - + String sales = JDUtil.getSaleCount(jdGoods.getInOrderCount30Days()); - + // 鑾峰彇鎺ㄨ崘璇� - String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, jdGoods.getSkuName(), sales, + String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, jdGoods.getSkuName(), sales, couponAmount, null); - + // 鑾峰彇璇勮璇� BigDecimal price = jdGoods.getPrice(); JDPingouInfo pinGouInfo = jdGoods.getPinGouInfo(); @@ -839,15 +972,22 @@ price = pinGouInfo.getPingouPrice(); } String zkPrice = BigDecimalUtil.getWithNoZera(price).toString(); - String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice, + String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice, ConfigKeyEnum.quickShareJDCommentText); - - // 浜戝彂鍗� - sendGoods(robotId, wxId, listOpen, recommendText, commentText, jdGoods.getImageList(), user.getId(), pid); + + // 寮傛鎵ц鍙戦�� + executor.execute(new Runnable() { + @Override + public void run() { + sendGoods(robotId, wxId, listOpen, recommendText, commentText, jdGoods.getImageList(), user.getId(), pid); + } + }); + } - + /** * 浜笢鍟嗗搧浜戝彂鍗� + * * @param user * @param robotId * @param wxId @@ -856,19 +996,19 @@ * @param listOpen * @throws UserCloudException */ - private void sendPDDGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, + private void sendPDDGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, List<UserCloudGroup> listOpen, String pid) throws UserCloudException { PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId); if (goods == null) throw new UserCloudException(1, "璇ュ晢鍝佸凡涓嬫灦"); - + String jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsId, PinDuoDuoApiUtil.PID_SHARE + "", user.getId() + ""); - + boolean coupon = true; if (goods.getHasCoupon() == null || !goods.getHasCoupon()) { coupon = false; } - + String quanPrice = ""; String couponAmount = ""; if (coupon) { @@ -877,33 +1017,42 @@ quanPrice = BigDecimalUtil.getWithNoZera(amount).toString(); couponAmount = BigDecimalUtil.getWithNoZera(PinDuoDuoUtil.getQuanPrice(goods)).toString(); } - + String sales = goods.getSalesTip(); if (StringUtil.isNullOrEmpty(sales)) { sales = "0"; } - + // 鑾峰彇鎺ㄨ崘璇� - String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getGoodsName(), sales, + String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getGoodsName(), sales, couponAmount, null); - + // 鑾峰彇璇勮璇� - String zkPrice = MoneyBigDecimalUtil.div(new BigDecimal(goods.getMinGroupPrice()), new BigDecimal(100)).setScale(2).toString(); - String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice, + String zkPrice = MoneyBigDecimalUtil.div(new BigDecimal(goods.getMinGroupPrice()), new BigDecimal(100)) + .setScale(2).toString(); + String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice, ConfigKeyEnum.quickSharePDDCommentText); - + List<String> list = null; String[] goodsGalleryUrls = goods.getGoodsGalleryUrls(); if (goodsGalleryUrls != null && goodsGalleryUrls.length > 0) { list = Arrays.asList(goodsGalleryUrls); } - // 浜戝彂鍗� - sendGoods(robotId, wxId, listOpen, recommendText, commentText, list, user.getId(), pid ); + + List<String> list2 = list; + // 寮傛鎵ц鍙戦�� + executor.execute(new Runnable() { + @Override + public void run() { + sendGoods(robotId, wxId, listOpen, recommendText, commentText, list2, user.getId(), pid); + } + }); + } - - + /** * 鍞搧浼氬晢鍝� + * * @param user * @param robotId * @param wxId @@ -913,15 +1062,16 @@ * @param pid * @throws UserCloudException */ - private void sendVIPGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, + private void sendVIPGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, List<UserCloudGroup> listOpen, String pid) throws UserCloudException { VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(goodsId + ""); if (goods == null) throw new UserCloudException(1, "璇ュ晢鍝佸凡涓嬫灦"); - VIPConvertResultDTO resultDTO = VipShopApiUtil.convertLink(goodsId + "", VipShopUtil.getShareChanTag(user.getId())); + VIPConvertResultDTO resultDTO = VipShopApiUtil.convertLink(goodsId + "", + VipShopUtil.getShareChanTag(user.getId())); String jumpLink = resultDTO.getUrl(); - + boolean coupon = false; String quanPrice = ""; String couponAmount = ""; @@ -929,16 +1079,22 @@ String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getGoodsName(), null, couponAmount, null); // 鑾峰彇璇勮璇� - String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, goods.getMarketPrice(), - quanPrice, ConfigKeyEnum.quickShareVIPCommentText); - - // 浜戝彂鍗� - sendGoods(robotId, wxId, listOpen, recommendText, commentText, goods.getGoodsDetailPictures(), user.getId(), pid); + String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, + goods.getMarketPrice(), quanPrice, ConfigKeyEnum.quickShareVIPCommentText); + + // 寮傛鎵ц鍙戦�� + executor.execute(new Runnable() { + @Override + public void run() { + sendGoods(robotId, wxId, listOpen, recommendText, commentText, goods.getGoodsDetailPictures(), user.getId(), + pid); + } + }); } - - + /** * 浜笢鍟嗗搧浜戝彂鍗� + * * @param user * @param robotId * @param wxId @@ -947,46 +1103,49 @@ * @param listOpen * @throws UserCloudException */ - private void sendSuNingGoods(UserInfo user, int robotId, String wxId, Long goodsId, Long sellerId, String relationId, - List<UserCloudGroup> listOpen, String pid) throws UserCloudException { - SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsId +"", sellerId +""); + private void sendSuNingGoods(UserInfo user, int robotId, String wxId, Long goodsId, Long sellerId, + String relationId, List<UserCloudGroup> listOpen, String pid) throws UserCloudException { + SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsId + "", sellerId + ""); if (goods == null) throw new UserCloudException(1, "璇ュ晢鍝佸凡涓嬫灦"); - - + String couponLink = goods.getCouponInfo().getCouponUrl(); - String jumpLink = SuningApiUtil.convertLink(SuningUtil.getProductUrl(sellerId +"", goodsId +""), + String jumpLink = SuningApiUtil.convertLink(SuningUtil.getProductUrl(sellerId + "", goodsId + ""), StringUtil.isNullOrEmpty(couponLink) ? null : couponLink, SuningApiUtil.PID_SHARE, user.getId() + ""); - - + boolean coupon = false; String couponAmount = ""; String sales = null; if (goods.getCouponInfo() != null && !StringUtil.isNullOrEmpty(goods.getCouponInfo().getCouponUrl())) {// 鏈夊埜 couponAmount = new BigDecimal(goods.getCouponInfo().getCouponValue()).toString(); coupon = true; - } - + } + // 鑾峰彇鎺ㄨ崘璇� - String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getCommodityInfo().getCommodityName(), sales, - couponAmount, null); - + String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, + goods.getCommodityInfo().getCommodityName(), sales, couponAmount, null); + // 鐢熸垚蹇嵎鍒嗕韩鍐呭 String template = configService.get(ConfigKeyEnum.quickShareSuNingCommentText.getKey()); String commentText = shareGoodsTextTemplateService.createQuickShareTextSuNing(template, goods, jumpLink); - - + List<String> imgList = new ArrayList<>(); for (SuningGoodsImg img : goods.getCommodityInfo().getPictureUrl()) { imgList.add(img.getPicUrl()); } - // 浜戝彂鍗� - sendGoods(robotId, wxId, listOpen, recommendText, commentText, imgList, user.getId(), pid); + executor.execute(new Runnable() { + @Override + public void run() { + // 浜戝彂鍗� + sendGoods(robotId, wxId, listOpen, recommendText, commentText, imgList, user.getId(), pid); + } + }); } - + /** * 鍙戦�佸晢鍝� + * * @param robotId * @param title * @param comment @@ -994,29 +1153,33 @@ * @param wxId * @param listOpen */ - private void sendGoods(int robotId,String wxId, List<UserCloudGroup> listOpen, String title, - String comment, List<String> listImg, Long uid, String pid) { + private void sendGoods(int robotId, String wxId, List<UserCloudGroup> listOpen, String title, String comment, + List<String> listImg, Long uid, String pid) { // 閬嶅巻缇�-鏈嬪弸鍦� - for (UserCloudGroup cloudGroup: listOpen) { + for (UserCloudGroup cloudGroup : listOpen) { UserCloudSendContent sendContent = new UserCloudSendContent(); sendContent.setPid(pid); sendContent.setUid(uid); sendContent.setGroupId(cloudGroup.getGroupId()); sendContent.setCreateTime(new Date()); - - if(cloudGroup.getType() == UserCloudGroup.TYPE_CIRCLE) { // 鏈嬪弸鍦� + + if (cloudGroup.getType() == UserCloudGroup.TYPE_CIRCLE) { // 鏈嬪弸鍦� sendContent.setType(UserCloudSendContent.TYPE_CIRCLE); String picUrl = ""; if (listImg.size() > 0) { - for (String img: listImg) { - picUrl += "," + img; + for (String img : listImg) { + picUrl += TbImgUtil.getTBSize220Img(img) + ";"; } + if (picUrl.endsWith(";")) + picUrl = picUrl.substring(0, picUrl.length() - 1); } + + String picUrlUpload = AitaokerApiUtil.macsendUpload(robotId, picUrl); + sendContent.setPicUrlUpload(picUrlUpload); sendContent.setTitle(title); sendContent.setPicUrl(picUrl); - // 鍙戝湀鍐呭 - String circleId = AitaokerApiUtil.macsendCircle(robotId, title, picUrl); + String circleId = AitaokerApiUtil.macsendCircle(robotId, title, picUrlUpload); // 璇勮鏂囨湰 if (!StringUtil.isNullOrEmpty(circleId)) { sendContent.setState(true); @@ -1035,20 +1198,27 @@ if (macsend) sendContent.setTitle(title); } - + // 鍙戦�佸浘鐗� - String picurl = listImg.get(0); - if (!StringUtil.isNullOrEmpty(picurl)) { - try { - String imgBase64 = ImageToBase64.NetImageToBase64(picurl); - boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), imgBase64); - if (macsend) - sendContent.setPicUrl(picurl); - } catch (Exception e) { - LogHelper.errorDetailInfo(e); - } - + int num = 1; + String picNum = configService.get(ConfigKeyEnum.robotCloudGroupPictureNum.getKey()); + if (!StringUtil.isNullOrEmpty(picNum)) { + num = Integer.parseInt(picNum); } + + if (listImg.size() > 0) + for (int i = 0; i < num && i < listImg.size(); i++) { + try { + String imgBase64 = ImageToBase64.NetImageToBase64(listImg.get(i)); + boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), + imgBase64); + if (macsend) + sendContent.setPicUrl(listImg.get(i)); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + } + // 璇勮鏂囨湰 List<String> list = new ArrayList<>(); boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), comment); @@ -1063,47 +1233,130 @@ } @Override - public void fixedTimeSend(String id) { - if (StringUtil.isNullOrEmpty(id)) + public void fixedTimeSend(List<GoodsEvaluate> listActivity, List<GoodsEvaluate> listGoods, boolean timeLimit) { + if (listGoods == null && listActivity == null) return; - // 涓�涓皬鏃朵箣鍓� - long time = java.lang.System.currentTimeMillis() - 1000 * 60 * 60 ; - Date lastTime = new Date(time); - - for (int i = 0; i < 1000; i ++) { - List<Long> list = userCloudMapper.listValidUid((i-1)*1000, 1000); - if (list == null || list.size() == 0) { + Date lastTime = new Date(java.lang.System.currentTimeMillis() - 1000 * 60 * 60); + for (int i = 0; i < 1000; i++) { + // 鏌ヨ鍝簺鐢ㄦ埛寮�閫� + List<Long> listUser = userCloudMapper.listValidUid(i * 1000, 1000); + if (listUser == null || listUser.size() == 0) { break; } - - for (Long uid: list) { - try { - UserCloudSendRecord record = userCloudSendRecordService.getByUidAndSendId(uid, id); - if (record != null) - continue; - - UserCloudSendRecord last = userCloudSendRecordService.getLastByUid(uid, lastTime); - if (last != null) - continue; - - boolean official = false; + + // 閬嶅巻鐢ㄦ埛 + for (Long uid : listUser) { + try {// 鍒ゆ柇鏄惁寮�閫氬畼鏂归噰闆� UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid); - if (cloudManage != null) { - if (cloudManage.getOfficial() != null) - official = cloudManage.getOfficial(); + if (cloudManage == null || cloudManage.getOfficial() == null || !cloudManage.getOfficial()) { + continue; } - if (!Constant.IS_TEST && official) { - UserCloudMQMsg msg = new UserCloudMQMsg(uid, id, UserCloudMQMsg.TYPE_EVALUATE); - Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userCloud, msg); - producer.send(message); + // 鏃堕棿闂撮殧锛氭槸鍚﹀湪涓�涓皬鏃跺唴宸插彂閫佽繃 + if (timeLimit) { + UserCloudSendRecord last = userCloudSendRecordService.getLastByUid(uid, lastTime); + if (last != null) + continue; + } + + + String evaluateId = null; + // 娲诲姩 + if (listActivity != null && listActivity.size() > 0) { + for (GoodsEvaluate evaluate : listActivity) { + UserCloudSendRecord record = userCloudSendRecordService.getByUidAndSendId(uid, + evaluate.getId()); + if (record != null) + continue; + + evaluateId = evaluate.getId(); + break; + } + } + // 鍗曞搧 + if (StringUtil.isNullOrEmpty(evaluateId) && listGoods != null && listGoods.size() > 0) { + for (GoodsEvaluate evaluate : listGoods) { + UserCloudSendRecord record = userCloudSendRecordService.getByUidAndSendId(uid, + evaluate.getId()); + if (record != null) + continue; + + evaluateId = evaluate.getId(); + break; + } + } + + if (!StringUtil.isNullOrEmpty(evaluateId)) { + UserCloudMQMsg msg = new UserCloudMQMsg(uid, evaluateId, UserCloudMQMsg.TYPE_EVALUATE); + Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userCloud, + msg); + rocketMQManager.sendNormalMsg(message, null); } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } - } + + private void offlineNotification(Long uid) { + UserCloudManage cloudManage = userCloudManageService.selectForUpdate(uid); + if (cloudManage == null) { + return; + } + + Boolean offlineNotice = cloudManage.getOfflineNotice(); + if (offlineNotice != null && offlineNotice) { + return; + } + + try { + userOtherMsgNotificationService.cloudMsg(uid, "浜戝彂鍗曞井淇¤处鍙�", "寰俊璐﹀彿鎺夌嚎", "闇�瑕佷綘閲嶆柊鎵弿浜岀淮鐮佺櫥褰�"); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + + // 绔欏唴淇¢�氱煡 + offlineNotificationZNX(uid); + + // 寤惰繜10鍒嗛挓鍐嶆鎻愰啋 + if (!Constant.IS_TEST) { + UserCloudMQMsg msg = new UserCloudMQMsg(uid, UserCloudMQMsg.TYPE_PUSH); + Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userCloud, msg); + message.setStartDeliverTime(java.lang.System.currentTimeMillis() + 1000 * 60 * 10); + rocketMQManager.sendNormalMsg(message, null); + } + + // 鏇存柊宸叉彁閱� + UserCloudManage updateManage = new UserCloudManage(); + updateManage.setId(uid); + updateManage.setOfflineNotice(true); + userCloudManageService.updateByPrimaryKeySelective(updateManage); + } + + // 绔欏唴淇¢�氱煡 + @Override + public void offlineNotificationZNX(Long uid) { + // 楠岃瘉鏄惁寮�閫� + UserCloud userCloud = userCloudMapper.getValidByUid(uid); + if (userCloud == null) + return; + + Integer robotId = userCloud.getRobotId(); + if (robotId == null) + return; + + // 鐧诲綍鐘舵�� + if (AitaokerApiUtil.onlineCheck(robotId)) { + return; + } + + try { + pushService.pushZNX(uid, "銆愰噸瑕侀�氱煡銆戜綘鐨勪簯鍙戝崟寰俊宸叉帀绾裤��", "闇�瑕佷綘閲嶆柊鎵弿浜岀淮鐮佺櫥褰�", null, null); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + } + } \ No newline at end of file -- Gitblit v1.8.0