| | |
| | | package com.yeshi.fanli.service.impl.user.cloud;
|
| | |
|
| | | import java.math.BigDecimal;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Arrays;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.stereotype.Service;
|
| | | import org.springframework.transaction.annotation.Transactional;
|
| | | import org.yeshi.utils.BigDecimalUtil;
|
| | |
|
| | | import com.aliyun.openservices.ons.api.Message;
|
| | | import com.aliyun.openservices.ons.api.Producer;
|
| | | import com.yeshi.fanli.dao.mybatis.user.cloud.UserCloudMapper;
|
| | | import com.yeshi.fanli.dto.aitaoker.RobotInfoDTO;
|
| | | import com.yeshi.fanli.dto.aitaoker.WeiXinGroupDTO;
|
| | | import com.yeshi.fanli.dto.jd.JDCouponInfo;
|
| | | import com.yeshi.fanli.dto.jd.JDPingouInfo;
|
| | | import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
|
| | | import com.yeshi.fanli.dto.mq.user.body.UserCloudMQMsg;
|
| | | import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
|
| | | import com.yeshi.fanli.dto.suning.SuningGoodsImg;
|
| | | import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
|
| | | import com.yeshi.fanli.dto.vip.VIPConvertResultDTO;
|
| | | import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
|
| | | import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
|
| | | import com.yeshi.fanli.entity.bus.user.UserInfo;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.CloudOrderMenuEnum;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloud;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGoods;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGroup;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudManage;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudSendContent;
|
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudSendRecord;
|
| | | import com.yeshi.fanli.entity.dynamic.CommentInfo;
|
| | | import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
|
| | | import com.yeshi.fanli.entity.dynamic.GoodsEvaluate.EvaluateEnum;
|
| | | import com.yeshi.fanli.entity.dynamic.ImgInfo;
|
| | | import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
|
| | | import com.yeshi.fanli.entity.goods.CommonGoods;
|
| | | import com.yeshi.fanli.entity.jd.JDGoods;
|
| | | import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
| | | import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
| | | import com.yeshi.fanli.entity.taobao.TaoBaoLink;
|
| | | import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
|
| | | import com.yeshi.fanli.exception.share.ShareGoodsException;
|
| | | import com.yeshi.fanli.exception.user.cloud.UserCloudException;
|
| | | import com.yeshi.fanli.exception.user.cloud.UserCloudGoodsException;
|
| | | import com.yeshi.fanli.log.LogHelper;
|
| | | import com.yeshi.fanli.service.inter.config.ConfigService;
|
| | | import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
|
| | | 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.order.OrderHongBaoMoneyComputeService;
|
| | | import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
| | | import com.yeshi.fanli.service.inter.user.QrCodeService;
|
| | | import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
|
| | | import com.yeshi.fanli.service.inter.user.UserInfoService;
|
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudGoodsService;
|
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudGroupService;
|
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudManageService;
|
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudSendContentService;
|
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudSendRecordService;
|
| | | 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.util.Constant;
|
| | | import com.yeshi.fanli.util.ImageToBase64;
|
| | | import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
| | | import com.yeshi.fanli.util.RedisManager;
|
| | | import com.yeshi.fanli.util.StringUtil;
|
| | | import com.yeshi.fanli.util.aitaoker.AitaokerApiUtil;
|
| | | import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
|
| | | import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
|
| | | import com.yeshi.fanli.util.jd.JDApiUtil;
|
| | | import com.yeshi.fanli.util.jd.JDUtil;
|
| | | import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
|
| | | import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
|
| | | import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
|
| | | import com.yeshi.fanli.util.rocketmq.MQTopicName;
|
| | | import com.yeshi.fanli.util.suning.SuningApiUtil;
|
| | | import com.yeshi.fanli.util.suning.SuningUtil;
|
| | | import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
| | | import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
|
| | | import com.yeshi.fanli.util.vipshop.VipShopUtil;
|
| | | import com.yeshi.fanli.vo.goods.GoodsDetailVO;
|
| | |
|
| | | @Service
|
| | | public class UserCloudServiceImpl implements UserCloudService {
|
| | |
|
| | | @Resource
|
| | | private UserCloudMapper userCloudMapper;
|
| | |
|
| | | @Resource
|
| | | private UserCloudGroupService userCloudGroupService;
|
| | |
|
| | | @Resource
|
| | | private GoodsEvaluateService goodsEvaluateService;
|
| | |
|
| | | @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;
|
| | | |
| | | |
| | | @Override
|
| | | public UserCloud getValidByUid(Long uid) {
|
| | | return userCloudMapper.getValidByUid(uid);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public UserCloud getLastByUid(Long uid) {
|
| | | return userCloudMapper.getLastByUid(uid);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public long countByUid(Long uid) {
|
| | | 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);
|
| | | }
|
| | | |
| | | @Override
|
| | | public long count(String key, Integer state) {
|
| | | Long count = userCloudMapper.count(key, state);
|
| | | if (count == null)
|
| | | count = 0L;
|
| | | return count;
|
| | | }
|
| | |
|
| | | @Override
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void updateWXInfo(Long uid, String wxId, String wxName, String wxPortrait) throws UserCloudException {
|
| | | UserCloud userCloud = userCloudMapper.getValidByUid(uid);
|
| | | if (userCloud == null)
|
| | | throw new UserCloudException(1, "云发单已过期");
|
| | |
|
| | | // 更新信息
|
| | | UserCloud update = new UserCloud();
|
| | | update.setId(userCloud.getId());
|
| | | update.setWxId(wxId);
|
| | | update.setWxName(wxName);
|
| | | update.setWxPortrait(wxPortrait);
|
| | | userCloudMapper.updateByPrimaryKeySelective(update);
|
| | |
|
| | | // 微信号变化-清空群信息
|
| | | if (!wxId.equals(userCloud.getWxId())) {
|
| | | userCloudGroupService.deleteGroupByUid(uid);
|
| | | }
|
| | |
|
| | | // 加入朋友圈
|
| | | if (StringUtil.isNullOrEmpty(userCloud.getWxId())) {
|
| | | userCloudGroupService.addCircle(uid);
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void openCloud(Long uid, Long orderId, CloudOrderMenuEnum menuEnum) throws UserCloudException {
|
| | | UserCloud existCloud = userCloudMapper.getByOrderId(orderId);
|
| | | if (existCloud != null) {
|
| | | return; // 该订单已处理完成
|
| | | }
|
| | |
|
| | | boolean renew = false;
|
| | | UserCloud userCloud = userCloudMapper.getLastByUid(uid);
|
| | | if (userCloud != null) {
|
| | | // 续费
|
| | | if (userCloud.getEndTime().getTime() > java.lang.System.currentTimeMillis())
|
| | | renew = true;
|
| | | // 验证套餐是否相同
|
| | | if (renew && userCloud.getRobotType() != menuEnum.getType()) {
|
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]已有其他云发单套餐还未结束");
|
| | | throw new UserCloudException(1, "已有其他云发单套餐还未结束");
|
| | | }
|
| | | }
|
| | |
|
| | | RobotInfoDTO dto = null;
|
| | | if (renew) { // 续费
|
| | | dto = AitaokerApiUtil.robotRenewals(userCloud.getRobotId(), menuEnum.getMonth());
|
| | | } else {
|
| | | dto = AitaokerApiUtil.robotCreate(menuEnum.getMonth(), menuEnum.getType(), "wechatrobot", null);
|
| | | }
|
| | |
|
| | | if (dto == null) {
|
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回空值");
|
| | | throw new UserCloudException(1, "机器人获取失败");
|
| | | }
|
| | |
|
| | | String endTimeStr = dto.getEndTime();
|
| | | if (StringUtil.isNullOrEmpty(endTimeStr)) {
|
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间为空");
|
| | | throw new UserCloudException(1, "机器人返回时间为空");
|
| | | }
|
| | |
|
| | | long endTime = 0;
|
| | | try {
|
| | | endTime = Long.parseLong(endTimeStr);
|
| | | } catch (Exception e) {
|
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间格式不正确");
|
| | | throw new UserCloudException(1, "机器人返回时间格式不正确");
|
| | | }
|
| | |
|
| | | Integer robotId = dto.getId();
|
| | | if (robotId == null) {
|
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 机器人ID返回为空");
|
| | | throw new UserCloudException(1, "机器人ID返回为空");
|
| | | }
|
| | |
|
| | | Integer groupNum = dto.getGroupNum();
|
| | | if (groupNum == null) {
|
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: groupNum返回为空");
|
| | | throw new UserCloudException(1, "groupNum返回为空");
|
| | | }
|
| | |
|
| | | UserCloud newCloud = new UserCloud();
|
| | | newCloud.setUid(uid);
|
| | | newCloud.setOrderId(orderId);
|
| | | newCloud.setGroupNum(groupNum);
|
| | | newCloud.setRobotId(robotId);
|
| | | newCloud.setRobotType(menuEnum.getType());
|
| | | if (renew) {
|
| | | newCloud.setStartTime(userCloud.getStartTime());
|
| | | } else {
|
| | | newCloud.setStartTime(new Date());
|
| | | }
|
| | | newCloud.setEndTime(new Date(endTime * 1000)); // Unix 转换 普通时间
|
| | | newCloud.setCreateTime(new Date());
|
| | | userCloudMapper.insertSelective(newCloud);
|
| | | |
| | | // 开启发圈功能
|
| | | userCloudManageService.save(uid, null, null);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void searchGroup(Long uid) throws UserCloudException {
|
| | | UserCloud userCloud = userCloudMapper.getValidByUid(uid);
|
| | | if (userCloud == null)
|
| | | throw new UserCloudException(1, "云发单已过期");
|
| | |
|
| | | Integer robotId = userCloud.getRobotId();
|
| | | if (robotId == null)
|
| | | throw new UserCloudException(1, "云发单机器人不存在");
|
| | |
|
| | | List<WeiXinGroupDTO> 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());
|
| | | }
|
| | | }
|
| | | |
| | | @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) {
|
| | | boolean official = false;
|
| | | UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid);
|
| | | if (cloudManage != null) {
|
| | | 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 + " 动态id:"+ id + "]原因:"+ e.getMsg());
|
| | | }
|
| | | }
|
| | | |
| | |
|
| | | private void sendCircleByDynamic(Long uid, String id, int way) throws UserCloudException {
|
| | | UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
| | | if (user == null)
|
| | | throw new UserCloudException(1, "用户信息不存在");
|
| | |
|
| | | 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, "邀请码未激活");
|
| | |
|
| | | UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
| | | String relationId = null;
|
| | | if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
| | | && taoBaoInfo.getRelationValid() == true)
|
| | | relationId = taoBaoInfo.getRelationId();
|
| | |
|
| | | if (StringUtil.isNullOrEmpty(relationId))
|
| | | throw new UserCloudException(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号");
|
| | | |
| | | |
| | | // 验证是否开通
|
| | | UserCloud userCloud = userCloudMapper.getValidByUid(uid);
|
| | | if (userCloud == null)
|
| | | throw new UserCloudException(1001, "云发单已过期");
|
| | |
|
| | | Integer robotId = userCloud.getRobotId();
|
| | | if (robotId == null)
|
| | | throw new UserCloudException(1002, "云发单机器人不存在");
|
| | |
|
| | | String wxId = userCloud.getWxId();
|
| | | if (StringUtil.isNullOrEmpty(wxId)) |
| | | throw new UserCloudException(1003, "微信号不存在,请先微信登录");
|
| | | |
| | | // 验证开启状态
|
| | | List<UserCloudGroup> listGroup = userCloudGroupService.listByUid(uid);
|
| | | if (listGroup == null || listGroup.size() == 0)
|
| | | throw new UserCloudException(1004, "请先微信登录");
|
| | |
|
| | | List<UserCloudGroup> listOpen = new ArrayList<>();
|
| | | for (UserCloudGroup cloudGrou : listGroup) {
|
| | | if (cloudGrou.getState()) {
|
| | | listOpen.add(cloudGrou);
|
| | | }
|
| | | }
|
| | | if (listOpen.size() == 0)
|
| | | throw new UserCloudException(1005, "请先开启云发单群功能");
|
| | | |
| | | |
| | | // 验证发圈是否可行
|
| | | GoodsEvaluate evaluate = goodsEvaluateService.getById(id);
|
| | | if (evaluate == null || evaluate.getState() == 0)
|
| | | throw new UserCloudException(1, "该内容已下架");
|
| | |
|
| | | if (evaluate.getType() != EvaluateEnum.single && evaluate.getType() != EvaluateEnum.activity)
|
| | | throw new UserCloudException(1, "该内容不支持云发单");
|
| | |
|
| | | // 验证是否可转链
|
| | | List<CommentInfo> comments = evaluate.getComments();
|
| | | if (comments == null || comments.size() == 0)
|
| | | throw new UserCloudException(1, "该内容不能转链");
|
| | |
|
| | | // 检测微信是否登录状态
|
| | | if (!AitaokerApiUtil.onlineCheck(robotId)) {
|
| | | throw new UserCloudException(1003, "请重新登录微信");
|
| | | }
|
| | | |
| | | |
| | | boolean hasToken = false;
|
| | | List<String> listComment = new ArrayList<>();
|
| | | for (CommentInfo commentInfo : comments) {
|
| | | String comment = null;
|
| | | try {
|
| | | comment = convertLinkManager.convertLinkFromText(commentInfo.getContent(), uid, true);
|
| | | hasToken = true;
|
| | | } catch (ConvertLinkExceptionException e) {
|
| | | if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
|
| | | throw new UserCloudException(1, e.getMsg());
|
| | | }
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | throw new UserCloudException(1, "该内容包含可转链口令或链接");
|
| | | }
|
| | |
|
| | | if (StringUtil.isNullOrEmpty(comment))
|
| | | comment = commentInfo.getContent();
|
| | |
|
| | | // 替换价格
|
| | | if (evaluate.getType() == EvaluateEnum.single) {
|
| | | GoodsDetailVO goods = evaluate.getGoods();
|
| | | comment = comment.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + "");
|
| | | if (!goods.isHasCoupon()) {
|
| | | comment = comment.replace("领券抢购", "抢购");
|
| | | comment = comment.replace("【券后价】[券后价]元", "");
|
| | | } else {
|
| | | comment = comment.replace("[券后价]", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponPrice()) + "");
|
| | | }
|
| | | 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, "该内容包含可转链口令或链接");
|
| | | |
| | |
|
| | | String qrCode = null;
|
| | | String cloudPic = null;
|
| | | ImgInfo imgVideo = null;
|
| | | List<String> listImg = new ArrayList<>();
|
| | | |
| | | List<ImgInfo> imgs = evaluate.getImgList();
|
| | | if (imgs != null && imgs.size() > 0) {
|
| | | for (ImgInfo imgInfo : imgs) {
|
| | | if (imgInfo.getType() == ImgEnum.video) {
|
| | | 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();
|
| | | }
|
| | | }
|
| | | |
| | | |
| | | // 保存发送记录
|
| | | UserCloudSendRecord sendRecord = new UserCloudSendRecord();
|
| | | sendRecord.setUid(uid);
|
| | | sendRecord.setSendId(id);
|
| | | sendRecord.setSendWay(way);
|
| | | sendRecord.setWxId(wxId);
|
| | | sendRecord.setRobotId(robotId);
|
| | | sendRecord.setSendTime(new Date());
|
| | | sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_STORE);
|
| | | UserCloudSendRecord result = userCloudSendRecordService.save(sendRecord);
|
| | | String pid = result.getId();
|
| | | |
| | | 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) { // 朋友圈
|
| | | 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;
|
| | | }
|
| | | }
|
| | | sendContent.setTitle(title);
|
| | | sendContent.setPicUrl(picUrl);
|
| | | // 发送图文
|
| | | circleId = AitaokerApiUtil.macsendCircle(robotId, title, picUrl);
|
| | | } 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) {
|
| | | boolean macsend = AitaokerApiUtil.macsendCircleComment(robotId, wxId, circleId, comment);
|
| | | if (macsend) {
|
| | | list.add(comment);
|
| | | }
|
| | | }
|
| | | sendContent.setComments(list);
|
| | | }
|
| | | } 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);
|
| | | }
|
| | | }
|
| | | |
| | | // 评论文本
|
| | | List<String> list = new ArrayList<>();
|
| | | for (String comment: listComment) {
|
| | | boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), comment);
|
| | | if (macsend) {
|
| | | list.add(comment);
|
| | | }
|
| | | }
|
| | | sendContent.setState(true);
|
| | | sendContent.setComments(list);
|
| | | }
|
| | | userCloudSendContentService.save(sendContent);
|
| | | }
|
| | | }
|
| | | |
| | | |
| | | @Override
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType, Long sellerId) throws UserCloudException{
|
| | | sendCircleByGoods(uid, goodsId, goodsType, null, sellerId);
|
| | | }
|
| | |
|
| | | @Override
|
| | | @Transactional(rollbackFor = Exception.class)
|
| | | public void autoSendCustomGoods(Long uid, Long id) {
|
| | | boolean custom = false;
|
| | | UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid);
|
| | | if (cloudManage != null) {
|
| | | 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) |
| | | return;
|
| | | |
| | | try {
|
| | | // 发送商品
|
| | | sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id, cgoods.getSellerId());
|
| | | } catch (UserCloudException e) {
|
| | | LogHelper.cloudInfo("autoSendCustomGoods - [uid:" +uid + " 库id:"+ id + "]原因:"+ e.getMsg());
|
| | | }
|
| | | }
|
| | |
|
| | | private void sendCircleByGoods(Long uid, Long goodsId, Integer goodsType, Long storeId, Long sellerId) throws UserCloudException {
|
| | | // 验证是否授权
|
| | | UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
|
| | | if (user == null)
|
| | | throw new UserCloudException(1, "用户信息不存在");
|
| | |
|
| | | 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, "邀请码未激活");
|
| | |
|
| | | UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
|
| | | String relationId = null;
|
| | | if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
|
| | | && taoBaoInfo.getRelationValid() == true)
|
| | | relationId = taoBaoInfo.getRelationId();
|
| | |
|
| | | if (StringUtil.isNullOrEmpty(relationId))
|
| | | throw new UserCloudException(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号");
|
| | |
|
| | | // 验证是否开通
|
| | | UserCloud userCloud = userCloudMapper.getValidByUid(uid);
|
| | | if (userCloud == null)
|
| | | throw new UserCloudException(1001, "云发单已过期");
|
| | |
|
| | | |
| | | // 加入我的备选库
|
| | | if (storeId == null) {
|
| | | try {
|
| | | UserCloudGoods cloudGoods = userCloudGoodsService.addGoods(uid, goodsId, goodsType, sellerId);
|
| | | if (cloudGoods != null)
|
| | | storeId =cloudGoods.getId();
|
| | | } catch (UserCloudGoodsException e) {
|
| | | LogHelper.cloudInfo("sendCustomGoods - [uid:" +uid + "goodsId:"+ goodsId + "goodsType" + goodsType +"]原因:"+ e.getMsg());
|
| | | throw new UserCloudException(1, "加入云发单备选库失败");
|
| | | }
|
| | | }
|
| | | |
| | | // 自选库商品是否打开
|
| | | boolean custom = false;
|
| | | UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid);
|
| | | if (cloudManage != null) {
|
| | | if (cloudManage.getCustom() != null)
|
| | | custom = cloudManage.getCustom();
|
| | | }
|
| | | if (!custom) {
|
| | | throw new UserCloudException(0, "成功加入云发单库");
|
| | | }
|
| | | |
| | | Integer robotId = userCloud.getRobotId();
|
| | | if (robotId == null)
|
| | | throw new UserCloudException(1, "云发单机器人不存在");
|
| | |
|
| | | String wxId = userCloud.getWxId();
|
| | | if (StringUtil.isNullOrEmpty(wxId)) |
| | | throw new UserCloudException(1002, "请先登录微信");
|
| | | |
| | | // 验证开启状态
|
| | | List<UserCloudGroup> listGroup = userCloudGroupService.listByUid(uid);
|
| | | if (listGroup == null || listGroup.size() == 0)
|
| | | throw new UserCloudException(1003, "请先登录微信");
|
| | |
|
| | | 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, "请重新登录微信");
|
| | | }
|
| | | |
| | | |
| | | // 保存发送记录
|
| | | UserCloudSendRecord sendRecord = new UserCloudSendRecord();
|
| | | sendRecord.setUid(uid);
|
| | | sendRecord.setGoodsId(goodsId + "");
|
| | | sendRecord.setGoodsType(goodsType + "");
|
| | | sendRecord.setWxId(wxId);
|
| | | sendRecord.setRobotId(robotId);
|
| | | sendRecord.setSendTime(new Date());
|
| | | if (storeId != null) {
|
| | | sendRecord.setSendId(storeId + "");
|
| | | sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_STORE);
|
| | | sendRecord.setSendWay(UserCloudSendRecord.SEND_WAY_AUTO);
|
| | | } else {
|
| | | sendRecord.setSendWay(UserCloudSendRecord.SEND_WAY_MANUAL);
|
| | | }
|
| | | 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());
|
| | | }
|
| | | |
| | | // 更新发单记录
|
| | | 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
|
| | | * @param wxId
|
| | | * @param goodsId
|
| | | * @param relationId
|
| | | * @param listOpen
|
| | | * @throws UserCloudException
|
| | | */
|
| | | private void sendTaoBaoGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId, |
| | | List<UserCloudGroup> listOpen, String pid) throws UserCloudException {
|
| | | TaoBaoLink taoBaoLink = null;
|
| | | try {
|
| | | taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(user.getId(), goodsId, relationId);
|
| | | } catch (ShareGoodsException e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | throw new UserCloudException(1, "该商品已下架");
|
| | | }
|
| | | 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 = "";
|
| | | if (coupon) {
|
| | | description = goods.getDescription();
|
| | | quanPrice = TaoBaoUtil.getAfterUseCouplePrice(goods) + "";
|
| | | couponAmount = MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()).toString();
|
| | | }
|
| | | String sales = TaoBaoUtil.getSaleCount(goods.getBiz30day());
|
| | | |
| | | // 获取推荐语
|
| | | 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);
|
| | | }
|
| | | |
| | | |
| | | /**
|
| | | * 京东商品云发单
|
| | | * @param user
|
| | | * @param robotId
|
| | | * @param wxId
|
| | | * @param goodsId
|
| | | * @param relationId
|
| | | * @param listOpen
|
| | | * @throws UserCloudException
|
| | | */
|
| | | 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() + "");
|
| | | |
| | | 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, |
| | | couponAmount, null);
|
| | | |
| | | // 获取评论语
|
| | | BigDecimal price = jdGoods.getPrice();
|
| | | JDPingouInfo pinGouInfo = jdGoods.getPinGouInfo();
|
| | | if (pinGouInfo != null) {
|
| | | price = pinGouInfo.getPingouPrice();
|
| | | }
|
| | | String zkPrice = BigDecimalUtil.getWithNoZera(price).toString();
|
| | | String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice, |
| | | ConfigKeyEnum.quickShareJDCommentText);
|
| | | |
| | | // 云发单
|
| | | sendGoods(robotId, wxId, listOpen, recommendText, commentText, jdGoods.getImageList(), user.getId(), pid);
|
| | | }
|
| | | |
| | | /**
|
| | | * 京东商品云发单
|
| | | * @param user
|
| | | * @param robotId
|
| | | * @param wxId
|
| | | * @param goodsId
|
| | | * @param relationId
|
| | | * @param listOpen
|
| | | * @throws UserCloudException
|
| | | */
|
| | | 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) {
|
| | | BigDecimal hundred = new BigDecimal(100);
|
| | | BigDecimal amount = MoneyBigDecimalUtil.div(new BigDecimal(goods.getCouponDiscount()), hundred);
|
| | | 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, |
| | | couponAmount, null);
|
| | | |
| | | // 获取评论语
|
| | | 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 );
|
| | | }
|
| | | |
| | | |
| | | /**
|
| | | * 唯品会商品
|
| | | * @param user
|
| | | * @param robotId
|
| | | * @param wxId
|
| | | * @param goodsId
|
| | | * @param relationId
|
| | | * @param listOpen
|
| | | * @param pid
|
| | | * @throws UserCloudException
|
| | | */
|
| | | 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()));
|
| | | String jumpLink = resultDTO.getUrl();
|
| | | |
| | | boolean coupon = false;
|
| | | String quanPrice = "";
|
| | | String couponAmount = "";
|
| | | // 获取推荐语
|
| | | 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);
|
| | | }
|
| | | |
| | | |
| | | /**
|
| | | * 京东商品云发单
|
| | | * @param user
|
| | | * @param robotId
|
| | | * @param wxId
|
| | | * @param goodsId
|
| | | * @param relationId
|
| | | * @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 +"");
|
| | | if (goods == null)
|
| | | throw new UserCloudException(1, "该商品已下架");
|
| | | |
| | | |
| | | String couponLink = goods.getCouponInfo().getCouponUrl();
|
| | | 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 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);
|
| | | }
|
| | | |
| | | /**
|
| | | * 发送商品
|
| | | * @param robotId
|
| | | * @param title
|
| | | * @param comment
|
| | | * @param listImg
|
| | | * @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) {
|
| | | // 遍历群-朋友圈
|
| | | 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) { // 朋友圈
|
| | | sendContent.setType(UserCloudSendContent.TYPE_CIRCLE);
|
| | | String picUrl = "";
|
| | | if (listImg.size() > 0) {
|
| | | for (String img: listImg) {
|
| | | picUrl += "," + img;
|
| | | }
|
| | | }
|
| | | sendContent.setTitle(title);
|
| | | sendContent.setPicUrl(picUrl);
|
| | | |
| | | // 发圈内容
|
| | | String circleId = AitaokerApiUtil.macsendCircle(robotId, title, picUrl);
|
| | | // 评论文本
|
| | | if (!StringUtil.isNullOrEmpty(circleId)) {
|
| | | sendContent.setState(true);
|
| | | List<String> list = new ArrayList<>();
|
| | | boolean macsend = AitaokerApiUtil.macsendCircleComment(robotId, wxId, circleId, comment);
|
| | | if (macsend) {
|
| | | list.add(comment);
|
| | | }
|
| | | sendContent.setComments(list);
|
| | | }
|
| | | } else {
|
| | | sendContent.setType(UserCloudSendContent.TYPE_GROUP);
|
| | | // 发送文本
|
| | | if (!StringUtil.isNullOrEmpty(title)) {
|
| | | boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), title);
|
| | | 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);
|
| | | }
|
| | | |
| | | }
|
| | | // 评论文本
|
| | | List<String> list = new ArrayList<>();
|
| | | boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), comment);
|
| | | if (macsend) {
|
| | | list.add(comment);
|
| | | }
|
| | | sendContent.setState(true);
|
| | | sendContent.setComments(list);
|
| | | }
|
| | | userCloudSendContentService.save(sendContent);
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void fixedTimeSend(String id) {
|
| | | if (StringUtil.isNullOrEmpty(id)) |
| | | 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) {
|
| | | 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;
|
| | | UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid);
|
| | | if (cloudManage != null) {
|
| | | if (cloudManage.getOfficial() != null)
|
| | | official = cloudManage.getOfficial();
|
| | | }
|
| | | |
| | | 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);
|
| | | }
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | }
|
| | | |
| | | }
|
| | | package com.yeshi.fanli.service.impl.user.cloud; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import com.yeshi.fanli.entity.SystemEnum; |
| | | import com.yeshi.fanli.entity.SystemPIDInfo; |
| | | import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException; |
| | | import com.yeshi.fanli.service.manger.PIDManager; |
| | | import com.yeshi.fanli.service.manger.goods.TaoBaoLinkManager; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | 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.yeshi.fanli.dao.mybatis.user.cloud.UserCloudMapper; |
| | | import com.yeshi.fanli.dto.aitaoker.RobotInfoDTO; |
| | | import com.yeshi.fanli.dto.aitaoker.WeiXinGroupDTO; |
| | | import com.yeshi.fanli.dto.jd.JDCouponInfo; |
| | | import com.yeshi.fanli.dto.jd.JDPingouInfo; |
| | | import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; |
| | | import com.yeshi.fanli.dto.mq.user.body.UserCloudMQMsg; |
| | | import com.yeshi.fanli.dto.pdd.PDDGoodsDetail; |
| | | import com.yeshi.fanli.dto.suning.SuningGoodsImg; |
| | | import com.yeshi.fanli.dto.suning.SuningGoodsInfo; |
| | | import com.yeshi.fanli.dto.vip.VIPConvertResultDTO; |
| | | import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo; |
| | | import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; |
| | | import com.yeshi.fanli.entity.bus.user.UserInfo; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.CloudOrderMenuEnum; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloud; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGoods; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGroup; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudManage; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudSendContent; |
| | | import com.yeshi.fanli.entity.bus.user.cloud.UserCloudSendRecord; |
| | | import com.yeshi.fanli.entity.dynamic.CommentInfo; |
| | | import com.yeshi.fanli.entity.dynamic.GoodsEvaluate; |
| | | import com.yeshi.fanli.entity.dynamic.GoodsEvaluate.EvaluateEnum; |
| | | import com.yeshi.fanli.entity.dynamic.ImgInfo; |
| | | import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum; |
| | | import com.yeshi.fanli.entity.goods.CommonGoods; |
| | | import com.yeshi.fanli.entity.jd.JDGoods; |
| | | import com.yeshi.fanli.entity.system.ConfigKeyEnum; |
| | | import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief; |
| | | import com.yeshi.fanli.entity.taobao.TaoBaoLink; |
| | | import com.yeshi.fanli.exception.goods.ConvertLinkException; |
| | | import com.yeshi.fanli.exception.user.cloud.UserCloudException; |
| | | import com.yeshi.fanli.exception.user.cloud.UserCloudGoodsException; |
| | | import com.yeshi.fanli.log.LogHelper; |
| | | import com.yeshi.fanli.service.inter.config.ConfigService; |
| | | import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService; |
| | | 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.push.PushService; |
| | | import com.yeshi.fanli.service.inter.user.UserInfoExtraService; |
| | | import com.yeshi.fanli.service.inter.user.UserInfoService; |
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudGoodsService; |
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudGroupService; |
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudManageService; |
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudSendContentService; |
| | | import com.yeshi.fanli.service.inter.user.cloud.UserCloudSendRecordService; |
| | | 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 org.yeshi.utils.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; |
| | | import com.yeshi.fanli.util.cache.JDGoodsCacheUtil; |
| | | import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil; |
| | | import com.yeshi.fanli.util.jd.JDApiUtil; |
| | | import com.yeshi.fanli.util.jd.JDUtil; |
| | | import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil; |
| | | import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil; |
| | | import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; |
| | | import com.yeshi.fanli.util.rocketmq.MQTopicName; |
| | | import com.yeshi.fanli.util.suning.SuningApiUtil; |
| | | import com.yeshi.fanli.util.suning.SuningUtil; |
| | | import com.yeshi.fanli.util.taobao.TaoBaoUtil; |
| | | import com.yeshi.fanli.util.vipshop.VipShopApiUtil; |
| | | import com.yeshi.fanli.util.vipshop.VipShopUtil; |
| | | import com.yeshi.fanli.vo.goods.GoodsDetailVO; |
| | | |
| | | @Service |
| | | public class UserCloudServiceImpl implements UserCloudService { |
| | | |
| | | Logger logger = LoggerFactory.getLogger(UserCloudService.class); |
| | | |
| | | @Resource |
| | | private UserCloudMapper userCloudMapper; |
| | | |
| | | @Resource |
| | | private UserCloudGroupService userCloudGroupService; |
| | | |
| | | @Resource |
| | | private GoodsEvaluateService goodsEvaluateService; |
| | | |
| | | @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 RedisManager redisManager; |
| | | |
| | | @Resource |
| | | private ShareGoodsTextTemplateService shareGoodsTextTemplateService; |
| | | |
| | | @Resource |
| | | private UserCloudSendRecordService userCloudSendRecordService; |
| | | |
| | | @Resource |
| | | private UserCloudSendContentService userCloudSendContentService; |
| | | |
| | | @Resource |
| | | private UserCloudManageService userCloudManageService; |
| | | |
| | | @Resource |
| | | private RocketMQManager rocketMQManager; |
| | | |
| | | @Resource |
| | | private UserOtherMsgNotificationService userOtherMsgNotificationService; |
| | | |
| | | @Resource |
| | | private PushService pushService; |
| | | |
| | | @Resource(name = "taskExecutor") |
| | | private TaskExecutor executor; |
| | | |
| | | @Resource |
| | | private TaoBaoLinkManager taoBaoLinkManager; |
| | | |
| | | |
| | | @Resource |
| | | private PIDManager pidManager; |
| | | |
| | | @Override |
| | | public UserCloud getValidByUid(Long uid) { |
| | | return userCloudMapper.getValidByUid(uid); |
| | | } |
| | | |
| | | @Override |
| | | public UserCloud getLastByUid(Long uid) { |
| | | return userCloudMapper.getLastByUid(uid); |
| | | } |
| | | |
| | | @Override |
| | | public long countByUid(Long uid) { |
| | | 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); |
| | | } |
| | | |
| | | @Override |
| | | public long count(String key, Integer state) { |
| | | Long count = userCloudMapper.count(key, state); |
| | | if (count == null) |
| | | count = 0L; |
| | | return count; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateWXInfo(Long uid, String wxId, String wxName, String wxPortrait) throws UserCloudException { |
| | | UserCloud userCloud = userCloudMapper.getValidByUid(uid); |
| | | 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()); |
| | | update.setWxId(wxId); |
| | | 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())) { |
| | | userCloudGroupService.deleteGroupByUid(uid); |
| | | } |
| | | |
| | | // 加入朋友圈 |
| | | if (StringUtil.isNullOrEmpty(userCloud.getWxId())) { |
| | | userCloudGroupService.addCircle(uid); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void openCloud(Long uid, Long orderId, CloudOrderMenuEnum menuEnum) throws UserCloudException { |
| | | UserCloud existCloud = userCloudMapper.getByOrderId(orderId); |
| | | if (existCloud != null) { |
| | | return; // 该订单已处理完成 |
| | | } |
| | | |
| | | boolean renew = false; |
| | | UserCloud userCloud = userCloudMapper.getLastByUid(uid); |
| | | if (userCloud != null) { |
| | | // 续费 |
| | | if (userCloud.getEndTime().getTime() > java.lang.System.currentTimeMillis()) |
| | | renew = true; |
| | | // 验证套餐是否相同 |
| | | if (renew && userCloud.getRobotType() != menuEnum.getRobotType()) { |
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]已有其他云发单套餐还未结束"); |
| | | throw new UserCloudException(1, "已有其他云发单套餐还未结束"); |
| | | } |
| | | } |
| | | |
| | | RobotInfoDTO dto = null; |
| | | if (renew) { // 续费 |
| | | dto = AitaokerApiUtil.robotRenewals(userCloud.getRobotId(), menuEnum.getMonth()); |
| | | } else { // 创建机器人 |
| | | dto = AitaokerApiUtil.robotCreate(menuEnum.getMonth(), menuEnum.getRobotType(), "wechatrobot", null); |
| | | } |
| | | |
| | | if (dto == null) { |
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 机器人创建失败"); |
| | | } |
| | | |
| | | Integer robotId = dto.getId(); |
| | | if (robotId == null) { |
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 机器人ID返回为空"); |
| | | } |
| | | |
| | | String endTimeStr = dto.getEndTime(); |
| | | if (StringUtil.isNullOrEmpty(endTimeStr)) { |
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间为空"); |
| | | } |
| | | |
| | | long endTime = 0; |
| | | try { |
| | | endTime = Long.parseLong(endTimeStr); |
| | | } catch (Exception e) { |
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: 返回时间格式不正确"); |
| | | } |
| | | |
| | | Integer groupNum = dto.getGroupNum(); |
| | | if (groupNum == null) { |
| | | LogHelper.cloudInfo("方法openCloud: [uid=" + uid + "][订单ID=" + orderId + "]机器人失败: groupNum返回为空"); |
| | | } |
| | | |
| | | UserCloud newCloud = new UserCloud(); |
| | | newCloud.setUid(uid); |
| | | newCloud.setOrderId(orderId); |
| | | newCloud.setGroupNum(groupNum); |
| | | newCloud.setRobotId(robotId); |
| | | 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()); |
| | | } |
| | | 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 |
| | | public void searchGroup(Long uid) throws UserCloudException { |
| | | UserCloud userCloud = userCloudMapper.getValidByUid(uid); |
| | | if (userCloud == null) |
| | | throw new UserCloudException(1, "云发单已过期"); |
| | | |
| | | Integer robotId = userCloud.getRobotId(); |
| | | if (robotId == null) |
| | | throw new UserCloudException(1, "云发单机器人不存在"); |
| | | |
| | | List<String> list = AitaokerApiUtil.getContract(robotId); |
| | | if (list == null || list.size() == 0) |
| | | throw new UserCloudException(1, "未检索到对应群"); |
| | | |
| | | 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 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) { |
| | | boolean official = false; |
| | | UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid); |
| | | if (cloudManage != null) { |
| | | 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 + " 动态id:" + 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, "用户信息不存在"); |
| | | |
| | | 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, "邀请码未激活"); |
| | | |
| | | UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid); |
| | | String relationId = null; |
| | | if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null |
| | | && taoBaoInfo.getRelationValid() == true) |
| | | relationId = taoBaoInfo.getRelationId(); |
| | | |
| | | if (StringUtil.isNullOrEmpty(relationId)) |
| | | throw new UserCloudException(2, "淘宝未授权,请前往\"我的\"绑定淘宝账号"); |
| | | |
| | | long time2 = java.lang.System.currentTimeMillis(); |
| | | LogHelper.test("sendCircleByDynamic保验证用户状态:" + (time2 - time1)); |
| | | |
| | | |
| | | // 验证是否开通 |
| | | UserCloud userCloud = userCloudMapper.getValidByUid(uid); |
| | | if (userCloud == null) |
| | | throw new UserCloudException(1001, "云发单已过期"); |
| | | |
| | | Integer robotId = userCloud.getRobotId(); |
| | | if (robotId == null) |
| | | throw new UserCloudException(1002, "云发单机器人不存在"); |
| | | |
| | | String wxId = userCloud.getWxId(); |
| | | 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); |
| | | if (listGroup == null || listGroup.size() == 0) |
| | | throw new UserCloudException(1004, "请先微信登录"); |
| | | |
| | | List<UserCloudGroup> listOpen = new ArrayList<>(); |
| | | for (UserCloudGroup cloudGrou : listGroup) { |
| | | if (cloudGrou.getState()) { |
| | | listOpen.add(cloudGrou); |
| | | } |
| | | } |
| | | if (listOpen.size() == 0) |
| | | throw new UserCloudException(1005, "请先开启云发单群功能"); |
| | | |
| | | long time4 = java.lang.System.currentTimeMillis(); |
| | | LogHelper.test("sendCircleByDynamic验证是否开启:" + (time4 - time3)); |
| | | |
| | | // 验证发圈是否可行 |
| | | GoodsEvaluate evaluate = goodsEvaluateService.getById(id); |
| | | if (evaluate == null || evaluate.getState() == 0) |
| | | throw new UserCloudException(1, "该内容已下架"); |
| | | |
| | | if (evaluate.getType() != EvaluateEnum.single && evaluate.getType() != EvaluateEnum.activity) |
| | | throw new UserCloudException(1, "该内容不支持云发单"); |
| | | |
| | | // 验证是否可转链 |
| | | List<CommentInfo> comments = evaluate.getComments(); |
| | | 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)) { |
| | | // 通知登录微信 |
| | | 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<>(); |
| | | for (CommentInfo commentInfo : comments) { |
| | | String comment = null; |
| | | try { |
| | | comment = convertLinkManager.convertLinkFromText(user.getSystem(), commentInfo.getContent(), uid, true, false); |
| | | hasToken = true; |
| | | } catch (ConvertLinkException e) { |
| | | if (e.getCode() != ConvertLinkException.CODE_NONE) { |
| | | throw new UserCloudException(1, e.getMsg()); |
| | | } |
| | | } catch (Exception e) { |
| | | LogHelper.errorDetailInfo(e); |
| | | throw new UserCloudException(1, "该内容包含可转链口令或链接"); |
| | | } |
| | | |
| | | if (StringUtil.isNullOrEmpty(comment)) |
| | | comment = commentInfo.getContent(); |
| | | |
| | | // 替换价格 |
| | | if (evaluate.getType() == EvaluateEnum.single) { |
| | | GoodsDetailVO goods = evaluate.getGoods(); |
| | | comment = comment.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goods.getZkPrice()) + ""); |
| | | if (!goods.isHasCoupon()) { |
| | | comment = comment.replace("领券抢购", "抢购"); |
| | | comment = comment.replace("【券后价】[券后价]元", ""); |
| | | } else { |
| | | comment = comment.replace("[券后价]", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponPrice()) + ""); |
| | | } |
| | | 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, "该内容包含可转链口令或链接"); |
| | | |
| | | // 异步执行发送 |
| | | executor.execute(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | sendEvaluate(uid, evaluate, way, userCloud, listOpen, listComment); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | 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) { |
| | | if (imgInfo.getType() == ImgEnum.video) { |
| | | imgVideo = imgInfo; |
| | | continue; |
| | | } |
| | | listImg.add(imgInfo.getUrl()); |
| | | } |
| | | } |
| | | |
| | | |
| | | String wxId = userCloud.getWxId(); |
| | | Integer robotId = userCloud.getRobotId(); |
| | | // 保存发送记录 |
| | | UserCloudSendRecord sendRecord = new UserCloudSendRecord(); |
| | | sendRecord.setUid(uid); |
| | | sendRecord.setSendId(evaluate.getId()); |
| | | sendRecord.setSendWay(way); |
| | | sendRecord.setWxId(wxId); |
| | | sendRecord.setRobotId(robotId); |
| | | sendRecord.setSendTime(new Date()); |
| | | sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_EVALUATE); |
| | | UserCloudSendRecord result = userCloudSendRecordService.save(sendRecord); |
| | | String pid = result.getId(); |
| | | |
| | | |
| | | 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) { // 朋友圈 |
| | | String circleId = null; |
| | | sendContent.setType(UserCloudSendContent.TYPE_CIRCLE); |
| | | |
| | | if (imgVideo == null) { |
| | | |
| | | // 发送图文 |
| | | String picUrl = ""; |
| | | if (listImg.size() > 0) { |
| | | 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, 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) { |
| | | boolean macsend = AitaokerApiUtil.macsendCircleComment(robotId, wxId, circleId, comment); |
| | | if (macsend) { |
| | | list.add(comment); |
| | | } |
| | | } |
| | | sendContent.setComments(list); |
| | | } |
| | | } else { // 群 |
| | | sendContent.setType(UserCloudSendContent.TYPE_GROUP); |
| | | |
| | | // 发送文本 |
| | | if (!StringUtil.isNullOrEmpty(title)) { |
| | | boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), title); |
| | | if (macsend) |
| | | sendContent.setTitle(title); |
| | | } |
| | | SystemEnum system = userInfoService.getUserSystem(uid); |
| | | // 发送图片 |
| | | int num = 1; |
| | | String picNum = configService.getValue(ConfigKeyEnum.robotCloudGroupPictureNum.getKey(), system); |
| | | 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) { |
| | | boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), comment); |
| | | if (macsend) { |
| | | list.add(comment); |
| | | } |
| | | } |
| | | sendContent.setState(true); |
| | | sendContent.setComments(list); |
| | | } |
| | | userCloudSendContentService.save(sendContent); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void sendCustomGoods(Long uid, String goodsId, Integer goodsType, Long sellerId) throws UserCloudException { |
| | | sendCircleByGoods(uid, goodsId, goodsType, null, sellerId, UserCloudSendRecord.SEND_WAY_MANUAL); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void autoSendCustomGoods(Long uid, Long id) { |
| | | boolean custom = false; |
| | | UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid); |
| | | if (cloudManage != null) { |
| | | 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) |
| | | return; |
| | | |
| | | try { |
| | | // 发送商品 |
| | | sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id, cgoods.getSellerId(), |
| | | UserCloudSendRecord.SEND_WAY_AUTO); |
| | | } catch (UserCloudException e) { |
| | | LogHelper.cloudInfo("autoSendCustomGoods - [uid:" + uid + " 库id:" + id + "]原因:" + e.getMsg()); |
| | | } |
| | | } |
| | | |
| | | private void sendCircleByGoods(Long uid, String 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) |
| | | throw new UserCloudException(1, "用户信息不存在"); |
| | | |
| | | 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, "邀请码未激活"); |
| | | |
| | | UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid); |
| | | String relationId = null; |
| | | if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null |
| | | && taoBaoInfo.getRelationValid() == true) |
| | | relationId = taoBaoInfo.getRelationId(); |
| | | |
| | | 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(); |
| | | } catch (UserCloudGoodsException e) { |
| | | 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); |
| | | if (cloudManage != null) { |
| | | if (cloudManage.getCustom() != null) |
| | | custom = cloudManage.getCustom(); |
| | | } |
| | | if (!custom) { |
| | | return; |
| | | } |
| | | |
| | | Integer robotId = userCloud.getRobotId(); |
| | | if (robotId == null) |
| | | throw new UserCloudException(1, "云发单机器人不存在"); |
| | | |
| | | String wxId = userCloud.getWxId(); |
| | | 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)) { |
| | | // 通知登录微信 |
| | | offlineNotification(uid); |
| | | |
| | | throw new UserCloudException(1003, "微信已掉线,需要重新扫描二维码登录"); |
| | | } |
| | | |
| | | long time6 = java.lang.System.currentTimeMillis(); |
| | | LogHelper.test("sendCircleByGoods验证是否登录微信:" + (time6 - time5)); |
| | | |
| | | // 保存发送记录 |
| | | UserCloudSendRecord sendRecord = new UserCloudSendRecord(); |
| | | sendRecord.setUid(uid); |
| | | sendRecord.setGoodsId(goodsId + ""); |
| | | sendRecord.setGoodsType(goodsType + ""); |
| | | sendRecord.setWxId(wxId); |
| | | sendRecord.setRobotId(robotId); |
| | | sendRecord.setSendTime(new Date()); |
| | | if (storeId != null) { |
| | | sendRecord.setSendId(storeId + ""); |
| | | sendRecord.setSendOrigin(UserCloudSendRecord.ORIGIN_STORE); |
| | | sendRecord.setSendWay(UserCloudSendRecord.SEND_WAY_AUTO); |
| | | } else { |
| | | sendRecord.setSendWay(UserCloudSendRecord.SEND_WAY_MANUAL); |
| | | } |
| | | UserCloudSendRecord result = userCloudSendRecordService.save(sendRecord); |
| | | |
| | | 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, Long.parseLong(goodsId), relationId, listOpen, result.getId()); |
| | | } else if (goodsType == Constant.SOURCE_TYPE_SUNING) { |
| | | sendSuNingGoods(user, robotId, wxId, Long.parseLong(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 + " 库id:" + 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); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 淘宝商品信息处理 |
| | | * |
| | | * @param user |
| | | * @param robotId |
| | | * @param wxId |
| | | * @param goodsId |
| | | * @param relationId |
| | | * @param listOpen |
| | | * @throws UserCloudException |
| | | */ |
| | | private void sendTaoBaoGoods(UserInfo user, int robotId, String wxId, String goodsId, String relationId, |
| | | List<UserCloudGroup> listOpen, String pid) throws UserCloudException { |
| | | TaoBaoLink taoBaoLink = null; |
| | | try { |
| | | taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(user.getSystem(), user.getId(), goodsId, relationId, null); |
| | | } catch (TaoBaoConvertLinkException e) { |
| | | LogHelper.errorDetailInfo(e); |
| | | throw new UserCloudException(1, "该商品已下架"); |
| | | } |
| | | 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 = ""; |
| | | if (coupon) { |
| | | description = goods.getDescription(); |
| | | quanPrice = TaoBaoUtil.getCouponPrice(goods) + ""; |
| | | couponAmount = MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()).toString(); |
| | | } |
| | | String sales = TaoBaoUtil.getSaleCount(goods.getBiz30day()); |
| | | |
| | | SystemEnum system = userInfoService.getUserSystem(user.getId()); |
| | | |
| | | // 获取推荐语 |
| | | String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getTitle(), sales, |
| | | couponAmount, description, system); |
| | | // 获取评论语 |
| | | String commentText = shareGoodsTextTemplateService.getCommentTextByTaoToken(coupon, taoBaoLink.getTaoToken(), |
| | | goods.getZkPrice().toString(), quanPrice, system); |
| | | |
| | | // 异步执行发送 |
| | | 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 |
| | | * @param goodsId |
| | | * @param relationId |
| | | * @param listOpen |
| | | * @throws UserCloudException |
| | | */ |
| | | private void sendJDGoods(UserInfo user, int robotId, String wxId, String 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 = null; |
| | | try { |
| | | jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, pidManager.getPidCache(user.getSystem(), Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share), |
| | | user.getId() + ""); |
| | | } catch (Exception e) { |
| | | logger.warn(String.format("京东转链出错:materialId-%s couponUrl-%s", materialId, couponUrl), e); |
| | | } |
| | | |
| | | boolean coupon = false; |
| | | if (couponInfo != null) { |
| | | coupon = true; |
| | | } |
| | | |
| | | String quanPrice = ""; |
| | | String couponAmount = ""; |
| | | if (coupon) { |
| | | quanPrice = BigDecimalUtil.getWithNoZera(JDUtil.getCouponPrice(jdGoods)).toString() + ""; |
| | | couponAmount = BigDecimalUtil.getWithNoZera(couponInfo.getDiscount()).toString(); |
| | | } |
| | | |
| | | String sales = JDUtil.getSaleCount(jdGoods.getInOrderCount30Days()); |
| | | |
| | | SystemEnum system = userInfoService.getUserSystem(user.getId()); |
| | | |
| | | // 获取推荐语 |
| | | String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, jdGoods.getSkuName(), sales, |
| | | couponAmount, null, system); |
| | | |
| | | // 获取评论语 |
| | | BigDecimal price = jdGoods.getPrice(); |
| | | JDPingouInfo pinGouInfo = jdGoods.getPinGouInfo(); |
| | | if (pinGouInfo != null) { |
| | | price = pinGouInfo.getPingouPrice(); |
| | | } |
| | | String zkPrice = BigDecimalUtil.getWithNoZera(price).toString(); |
| | | String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice, |
| | | ConfigKeyEnum.quickShareJDCommentText, system); |
| | | |
| | | // 异步执行发送 |
| | | 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 |
| | | * @param goodsId |
| | | * @param relationId |
| | | * @param listOpen |
| | | * @throws UserCloudException |
| | | */ |
| | | private void sendPDDGoods(UserInfo user, int robotId, String wxId, String 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(goods.getGoodsSign(), pidManager.getPidCache(user.getSystem(), Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share), user.getId() + ""); |
| | | |
| | | boolean coupon = true; |
| | | if (goods.getHasCoupon() == null || !goods.getHasCoupon()) { |
| | | coupon = false; |
| | | } |
| | | |
| | | String quanPrice = ""; |
| | | String couponAmount = ""; |
| | | if (coupon) { |
| | | BigDecimal hundred = new BigDecimal(100); |
| | | BigDecimal amount = MoneyBigDecimalUtil.div(new BigDecimal(goods.getCouponDiscount()), hundred); |
| | | quanPrice = BigDecimalUtil.getWithNoZera(amount).toString(); |
| | | couponAmount = BigDecimalUtil.getWithNoZera(PinDuoDuoUtil.getCouponPrice(goods)).toString(); |
| | | } |
| | | |
| | | String sales = goods.getSalesTip(); |
| | | if (StringUtil.isNullOrEmpty(sales)) { |
| | | sales = "0"; |
| | | } |
| | | |
| | | SystemEnum system = userInfoService.getUserSystem(user.getId()); |
| | | |
| | | // 获取推荐语 |
| | | String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getGoodsName(), sales, |
| | | couponAmount, null, system); |
| | | |
| | | // 获取评论语 |
| | | String zkPrice = MoneyBigDecimalUtil.div(new BigDecimal(goods.getMinGroupPrice()), new BigDecimal(100)) |
| | | .setScale(2).toString(); |
| | | String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice, |
| | | ConfigKeyEnum.quickSharePDDCommentText, system); |
| | | |
| | | List<String> list = null; |
| | | String[] goodsGalleryUrls = goods.getGoodsGalleryUrls(); |
| | | if (goodsGalleryUrls != null && goodsGalleryUrls.length > 0) { |
| | | list = Arrays.asList(goodsGalleryUrls); |
| | | } |
| | | |
| | | 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 |
| | | * @param goodsId |
| | | * @param relationId |
| | | * @param listOpen |
| | | * @param pid |
| | | * @throws UserCloudException |
| | | */ |
| | | 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())); |
| | | String jumpLink = resultDTO.getUrl(); |
| | | |
| | | boolean coupon = false; |
| | | String quanPrice = ""; |
| | | String couponAmount = ""; |
| | | SystemEnum system = userInfoService.getUserSystem(user.getId()); |
| | | // 获取推荐语 |
| | | String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getGoodsName(), null, |
| | | couponAmount, null, system); |
| | | // 获取评论语 |
| | | String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, |
| | | goods.getMarketPrice(), quanPrice, ConfigKeyEnum.quickShareVIPCommentText, system); |
| | | |
| | | // 异步执行发送 |
| | | 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 |
| | | * @param goodsId |
| | | * @param relationId |
| | | * @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 + ""); |
| | | if (goods == null) |
| | | throw new UserCloudException(1, "该商品已下架"); |
| | | |
| | | String couponLink = goods.getCouponInfo().getCouponUrl(); |
| | | String jumpLink = SuningApiUtil.convertLink(SuningUtil.getProductUrl(sellerId + "", goodsId + ""), |
| | | StringUtil.isNullOrEmpty(couponLink) ? null : couponLink, pidManager.getPidCache(user.getSystem(), Constant.SOURCE_TYPE_SUNING, SystemPIDInfo.PidType.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; |
| | | } |
| | | |
| | | SystemEnum system = userInfoService.getUserSystem(user.getId()); |
| | | |
| | | // 获取推荐语 |
| | | String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, |
| | | goods.getCommodityInfo().getCommodityName(), sales, couponAmount, null, system); |
| | | |
| | | // 生成快捷分享内容 |
| | | String template = configService.getValue(ConfigKeyEnum.quickShareSuNingCommentText.getKey(), system); |
| | | String commentText = shareGoodsTextTemplateService.createQuickShareTextSuNing(template, goods, jumpLink); |
| | | |
| | | List<String> imgList = new ArrayList<>(); |
| | | for (SuningGoodsImg img : goods.getCommodityInfo().getPictureUrl()) { |
| | | imgList.add(img.getPicUrl()); |
| | | } |
| | | |
| | | executor.execute(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | // 云发单 |
| | | sendGoods(robotId, wxId, listOpen, recommendText, commentText, imgList, user.getId(), pid); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 发送商品 |
| | | * |
| | | * @param robotId |
| | | * @param title |
| | | * @param comment |
| | | * @param listImg |
| | | * @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) { |
| | | // 遍历群-朋友圈 |
| | | 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) { // 朋友圈 |
| | | sendContent.setType(UserCloudSendContent.TYPE_CIRCLE); |
| | | String picUrl = ""; |
| | | if (listImg.size() > 0) { |
| | | 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, picUrlUpload); |
| | | // 评论文本 |
| | | if (!StringUtil.isNullOrEmpty(circleId)) { |
| | | sendContent.setState(true); |
| | | List<String> list = new ArrayList<>(); |
| | | boolean macsend = AitaokerApiUtil.macsendCircleComment(robotId, wxId, circleId, comment); |
| | | if (macsend) { |
| | | list.add(comment); |
| | | } |
| | | sendContent.setComments(list); |
| | | } |
| | | } else { |
| | | sendContent.setType(UserCloudSendContent.TYPE_GROUP); |
| | | // 发送文本 |
| | | if (!StringUtil.isNullOrEmpty(title)) { |
| | | boolean macsend = AitaokerApiUtil.macsendText(robotId, cloudGroup.getGroupId(), title); |
| | | if (macsend) |
| | | sendContent.setTitle(title); |
| | | } |
| | | SystemEnum system = userInfoService.getUserSystem(uid); |
| | | // 发送图片 |
| | | int num = 1; |
| | | String picNum = configService.getValue(ConfigKeyEnum.robotCloudGroupPictureNum.getKey(), system); |
| | | 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); |
| | | if (macsend) { |
| | | list.add(comment); |
| | | } |
| | | sendContent.setState(true); |
| | | sendContent.setComments(list); |
| | | } |
| | | userCloudSendContentService.save(sendContent); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void fixedTimeSend(List<GoodsEvaluate> listActivity, List<GoodsEvaluate> listGoods, boolean timeLimit) { |
| | | if (listGoods == null && listActivity == null) |
| | | return; |
| | | // 一个小时之前 |
| | | 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 : listUser) { |
| | | try {// 判断是否开通官方采集 |
| | | UserCloudManage cloudManage = userCloudManageService.selectByPrimaryKey(uid); |
| | | if (cloudManage == null || cloudManage.getOfficial() == null || !cloudManage.getOfficial()) { |
| | | continue; |
| | | } |
| | | |
| | | // 时间间隔:是否在一个小时内已发送过 |
| | | 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; |
| | | } |
| | | |
| | | SystemEnum system = userInfoService.getUserSystem(uid); |
| | | |
| | | try { |
| | | pushService.pushZNX(uid, "【重要通知】你的云发单微信已掉线。", "需要你重新扫描二维码登录", null, null, system); |
| | | } catch (Exception e) { |
| | | LogHelper.errorDetailInfo(e); |
| | | } |
| | | } |
| | | |
| | | } |