fanli/src/main/java/com/yeshi/fanli/service/impl/integral/IntegralGetServiceImpl.java
@@ -1,7 +1,6 @@ package com.yeshi.fanli.service.impl.integral; import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -14,9 +13,9 @@ import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.UserRank; import com.yeshi.fanli.entity.integral.IntegralTask; import com.yeshi.fanli.entity.integral.IntegralTaskRank; import com.yeshi.fanli.entity.integral.IntegralTask.FrequencyEnum; import com.yeshi.fanli.entity.integral.IntegralTask.TaskUniqueKeyEnum; import com.yeshi.fanli.entity.integral.IntegralTaskRank; import com.yeshi.fanli.entity.integral.IntegralTaskRecord; import com.yeshi.fanli.exception.integral.IntegralGetException; import com.yeshi.fanli.exception.integral.IntegralTaskRecordException; @@ -45,10 +44,10 @@ @Resource private RedisManager redisManager; @Resource private UserInfoExtraService userInfoExtraService; @Resource private IntegralTaskRankService integralTaskRankService; @@ -80,19 +79,19 @@ if (count > 0) throw new IntegralGetException(2, "事件触发达到上限"); } UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra == null) throw new IntegralGetException(2, "额外信息不存在"); UserRank userRank = userInfoExtra.getUserRank(); if (userRank == null) throw new IntegralGetException(2,"等级信息不存在"); throw new IntegralGetException(2, "等级信息不存在"); int goldCoin = task.getGoldCoin(); if (task.getDoubleNum() != null && task.getDoubleNum() > 0) goldCoin = task.getDoubleNum() * goldCoin; Long taskId = task.getId(); IntegralTaskRank traskRank = integralTaskRankService.getByTsakIdAndRankId(taskId, userRank.getId()); if (traskRank != null) { fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -66,6 +66,7 @@ import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TaoBaoConstant; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.cmq.HongBaoRecieveCMQManager; import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; import com.yeshi.fanli.util.jd.JDApiUtil; import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil; @@ -404,6 +405,11 @@ // 添加资金明细与红包的映射关系 for (HongBaoV2 v2 : userHongBao.get(uid)) { accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(v2.getId(), userMoneyDetail.getId()); try { HongBaoRecieveCMQManager.getInstance().addHongBaoRecieveMsg(v2.getId()); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } // 站内信+推送 @@ -567,6 +573,7 @@ @Override @Transactional public void fanliInvaiteAndShare(Long uid) throws TaoBaoWeiQuanException { List<Long> recieveHongBaoIds = new ArrayList<>(); /** * 处理邀请赚订单 */ @@ -574,14 +581,14 @@ List<Integer> types = new ArrayList<>(); types.add(HongBaoV2.TYPE_YIJI); types.add(HongBaoV2.TYPE_ERJI); long count= hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid); List<HongBaoV2> hongBaoList =new ArrayList<>(); //1000条数据为1页 int page=(int) (count%1000==0?count/1000:count/1000+1); for(int i=0;i<page;i++) { List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, i*1000,1000); if(tempHongBaoList!=null&&tempHongBaoList.size()>0) long count = hongBaoV2Mapper.countCanBalanceHongBaoByTypeAndUid(types, uid); List<HongBaoV2> hongBaoList = new ArrayList<>(); // 1000条数据为1页 int page = (int) (count % 1000 == 0 ? count / 1000 : count / 1000 + 1); for (int i = 0; i < page; i++) { List<HongBaoV2> tempHongBaoList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, i * 1000, 1000); if (tempHongBaoList != null && tempHongBaoList.size() > 0) hongBaoList.addAll(tempHongBaoList); } // 灰度测试中,京东/拼多多订单分享/邀请订单不返利 @@ -660,8 +667,8 @@ types.clear(); types.add(HongBaoV2.TYPE_SHARE_YIJI); types.add(HongBaoV2.TYPE_SHARE_ERJI); //TODO 需要处理超过1w条数据的订单 List<HongBaoV2> hbList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid,0, 10000); // TODO 需要处理超过1w条数据的订单 List<HongBaoV2> hbList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, 0, 10000); if (hbList != null && hbList.size() > 0) totalHongBaoList.addAll(hbList); @@ -731,7 +738,8 @@ for (String orderId : drawBackOrders) taoBaoWeiQuanDrawBackService.doWeiQuanInvite(orderId); } if (hbIdList.size() > 0) recieveHongBaoIds.addAll(hbIdList); hbIdList.clear(); drawBackOrders.clear(); @@ -745,8 +753,8 @@ // 查询UID的分享赚订单 types.clear(); types.add(HongBaoV2.TYPE_SHARE_GOODS); //TODO 需要处理超过10000条数据的订单 List<HongBaoV2> hongBaoShareList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid,0, 10000); // TODO 需要处理超过10000条数据的订单 List<HongBaoV2> hongBaoShareList = hongBaoV2Mapper.listCanBalanceHongBaoByTypeAndUid(types, uid, 0, 10000); for (HongBaoV2 hongBao : hongBaoShareList) { hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBao.getId()); hongBao = filterWeiQuanINGHongBao(hongBao); @@ -807,6 +815,8 @@ // 添加到红包返利记录集合 accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId()); if (hbIdList.size() > 0) recieveHongBaoIds.addAll(hbIdList); } catch (UserMoneyDetailException e) { try { LogHelper.errorDetailInfo(e); @@ -823,6 +833,16 @@ taoBaoWeiQuanDrawBackService.doWeiQuanShare(orderId); } // 所有的返利到账红包ID for (Long hongBaoId : recieveHongBaoIds) { try { HongBaoRecieveCMQManager.getInstance().addHongBaoRecieveMsg(hongBaoId); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoModifyRecordServiceImpl.java
@@ -21,6 +21,7 @@ import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; @Service @@ -116,6 +117,10 @@ addModifyRecord(uid, ModifyTypeEnum.nickName, user.getNickName() + ""); } if (!Constant.systemCommonConfig.getDefaultPortrait().equalsIgnoreCase(user.getPortrait())) { addModifyRecord(uid, ModifyTypeEnum.portrait, user.getPortrait()); } UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra != null) { if (userInfoExtra.getSex() != null) fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java
@@ -29,6 +29,7 @@ import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; import com.yeshi.fanli.exception.TaoBaoWeiQuanException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service; import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce; import com.yeshi.fanli.service.inter.jd.JDOrderService; import com.yeshi.fanli.service.inter.lable.BoutiqueAutoRuleService; @@ -42,6 +43,7 @@ import com.yeshi.fanli.service.inter.user.ExtractService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.util.cmq.HongBaoRecieveCMQManager; import com.yeshi.fanli.util.cmq.JDOrderCMQManager; import com.yeshi.fanli.util.cmq.PDDOrderCMQManager; import com.yeshi.fanli.util.cmq.ThreeSaleCMQManager; @@ -101,6 +103,9 @@ @Resource private PDDOrderService pddOrderService; @Resource private HongBaoV2Service hongBaoV2Service; private static boolean isInited = false; @@ -686,4 +691,51 @@ } /** * 红包到账后的金币获取 */ public void doHongBaoRecieveIntegralGetJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { Map<String, Long> map = HongBaoRecieveCMQManager.getInstance() .consumeQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, 16); if (map != null) { Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); Long hongBaoId = map.get(key); try { HongBaoV2 hongBaoV2 = hongBaoV2Service.selectByPrimaryKey(hongBaoId); if (hongBaoV2.getType() == HongBaoV2.TYPE_ZIGOU) {// 自购 // TODO 添加加金币事件 } else if (hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_GOODS) {// 分享赚 // TODO 添加加金币事件 } else if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 一级邀请赚 // TODO 添加加金币事件 } else if (hongBaoV2.getType() == HongBaoV2.TYPE_ERJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 二级邀请赚 // TODO 添加加金币事件 } HongBaoRecieveCMQManager.getInstance() .deleteQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } } }); } } fanli/src/main/java/com/yeshi/fanli/util/cmq/HongBaoRecieveCMQManager.java
New file @@ -0,0 +1,88 @@ package com.yeshi.fanli.util.cmq; import java.util.HashMap; import java.util.List; import java.util.Map; import org.yeshi.utils.CMQUtil; import com.qcloud.cmq.Message; import com.yeshi.fanli.log.LogHelper; public class HongBaoRecieveCMQManager { private static String secretId = "AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25"; private static String secretKey = "xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo"; private static HongBaoRecieveCMQManager userMoneyChangeCMQManager; private static CMQUtil cmqUtil; private final static String TOPIC_NAME = "topic_hongbao"; public static String QUEUE_INTEGRAL = TOPIC_NAME + "_" + "integral"; public static String SUBSCRIBE_INTEGRAL = "integral"; static { cmqUtil = CMQUtil.getInstance(secretId, secretKey); // 创建主题,添加订阅 cmqUtil.createTopic(TOPIC_NAME); // 用户券订阅 String[] subscripts = new String[] { SUBSCRIBE_INTEGRAL }; String[] queues = new String[] { QUEUE_INTEGRAL }; for (int i = 0; i < subscripts.length; i++) { String queueName = queues[i]; try { cmqUtil.createQueue(queueName); } catch (Exception e) { } try { cmqUtil.subscribeTopic(TOPIC_NAME, subscripts[i], queueName); } catch (Exception e) { } } } public static HongBaoRecieveCMQManager getInstance() { if (userMoneyChangeCMQManager == null) userMoneyChangeCMQManager = new HongBaoRecieveCMQManager(); return userMoneyChangeCMQManager; } /** * 发布 * * @param hongBaoId */ public void addHongBaoRecieveMsg(Long hongBaoId) { if (hongBaoId == null) return; cmqUtil.publishTopicMessage(TOPIC_NAME, hongBaoId + ""); LogHelper.test("红包消息投递成功"); } /** * 消费队列消息 * * @param queueName * @param count * @return */ public Map<String, Long> consumeQueueMsg(String queueName, int count) { List<Message> list = cmqUtil.recieveMsg(count, queueName); Map<String, Long> map = new HashMap<>(); if (list != null) for (Message msg : list) { String result = msg.msgBody; map.put(msg.receiptHandle, Long.parseLong(result)); } return map; } public void deleteQueueMsg(String queueName, String receiptHandle) { cmqUtil.deleteMsg(queueName, receiptHandle); } } fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java
@@ -336,6 +336,7 @@ map.put("page", page + ""); map.put("page_size", pageSize + ""); String result = baseRequest(map); System.out.println(result); JSONObject json = JSONObject.fromObject(result); JSONObject root = json.optJSONObject("order_list_get_response"); if (root != null) {