package com.yeshi.fanli.util; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import javax.annotation.Resource; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Component; import org.yeshi.utils.NumberUtil; import org.yeshi.utils.tencentcloud.COSManager; import org.yeshi.utils.tencentcloud.entity.COSInitParams; import com.yeshi.fanli.dto.ad.DouYinDeviceActiveQueueDTO; import com.yeshi.fanli.dto.money.UserMoneyChangeDTO; import com.yeshi.fanli.dto.mq.UidDateDTO; import com.yeshi.fanli.entity.ad.DouYinClickEvent; import com.yeshi.fanli.entity.bus.user.AlipayTransferResultInfo; import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.bus.user.Order; import com.yeshi.fanli.entity.bus.user.ThreeSale; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.jd.JDOrder; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.order.HongBaoOrder; import com.yeshi.fanli.entity.pdd.PDDOrder; import com.yeshi.fanli.entity.push.DeviceActive; import com.yeshi.fanli.entity.push.PushQueueRecord; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException; import com.yeshi.fanli.exception.order.dividents.TeamDividentsRecordException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.ad.DouYinClickEventService; import com.yeshi.fanli.service.inter.lable.BoutiqueAutoRuleService; import com.yeshi.fanli.service.inter.lable.LabelService; import com.yeshi.fanli.service.inter.money.UserMoneyDebtService; import com.yeshi.fanli.service.inter.money.extract.ExtractService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.order.HongBaoOrderService; import com.yeshi.fanli.service.inter.order.HongBaoV2Service; import com.yeshi.fanli.service.inter.order.OrderProcessService; import com.yeshi.fanli.service.inter.order.jd.JDOrderService; import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService; import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService; import com.yeshi.fanli.service.inter.push.DeviceActiveService; import com.yeshi.fanli.service.inter.push.IOSPushService; import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.service.inter.user.integral.IntegralGetService; import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; import com.yeshi.fanli.service.manger.money.TeamEincomeManager; import com.yeshi.fanli.service.manger.order.TeamDividentsManager; import com.yeshi.fanli.util.ad.DouYinAdUtil; import com.yeshi.fanli.util.cmq.DouYinDeviceActiveCMQManager; import com.yeshi.fanli.util.cmq.HongBaoRecieveCMQManager; import com.yeshi.fanli.util.cmq.UserMoneyChangeCMQManager; import com.yeshi.fanli.util.cmq.order.JDOrderCMQManager; import com.yeshi.fanli.util.cmq.order.PDDOrderCMQManager; import com.yeshi.fanli.util.cmq.order.PlaceOrderCMQManager; import com.yeshi.fanli.util.cmq.order.TeamOrderCMQManager; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; /** * 系统初始化 * * @author Administrator * */ @Component public class SpringContext implements ApplicationListener { @Resource private UserInfoService userInfoService; @Resource private BoutiqueAutoRuleService boutiqueAutoRuleService; @Resource private ExtractService extractService; @Resource private IOSPushService iosPushService; @Resource private LabelService labelService; @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private OrderProcessService orderProcessService; @Resource private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService; @Resource private UserSystemCouponService userSystemCouponService; @Resource private ThreeSaleSerivce threeSaleSerivce; @Resource private TaoBaoOrderService taoBaoOrderService; @Resource private RedisManager redisManager; @Resource private UserMoneyDebtService userMoneyDebtService; @Resource private JDOrderService jdOrderService; @Resource private PDDOrderService pddOrderService; @Resource private HongBaoV2Service hongBaoV2Service; @Resource private IntegralGetService integralGetService; @Resource private CommonOrderService commonOrderService; @Resource private HongBaoOrderService hongBaoOrderService; @Resource private IntegralTaskRecordService integralTaskRecordService; @Resource private DeviceActiveService deviceActiveService; @Resource private TeamDividentsManager teamDividentsManager; @Resource private TeamEincomeManager teamEincomeManager; private static boolean isInited = false; public void onApplicationEvent(ContextRefreshedEvent arg0) { if (arg0.getApplicationContext().getParent() != null) { System.out.println(System.currentTimeMillis()); onApplication(arg0); } } private synchronized void onApplication(ContextRefreshedEvent context) { if (!isInited) { isInited = true; System.out.println("系统初始化完成"); init(context); } } private void init(ContextRefreshedEvent arg0) { initCOS(); if (Constant.IS_TASK) { doExtractResult();// 处理提现结果 doTaoBaoOrders();// 处理淘宝订单 doTaoBaoNewOrders();// 处理淘宝订单(刚刚产生的) doOrderFanLiNew();// 新版返利 doOrderShareFanLi(); doWeiQuanOrder();// 处理维权订单 doPushIOS();// 处理发送IOS消息 doUserMoneyDebtJob();// 债务偿还 initScheduler();// 启动商品更新定时任务 doUpdateGoodsJob(); // 更新商品队列 doJDOrderJob();// 京东订单处理 doPDDOrderJob();// 拼多多订单处理 doImportantTaoBaoGoodsUpdateJob();// 淘宝重要商品的信息更新 doHongBaoRecieveIntegralGetJob();// 返利到账,金币增加 // doPlaceOrderIntegralJob();// 下单赠送金币任务 // doDouYinDeviceActiveJob();// 抖音设备激活广告监测 doOrderTeamIncomePreFanLi();// 处理订单提成返利 doDividentsPreJob(); doOrderTeamIncomeFanLi(); doDividentsJob(); } } /** * 对象存储初始化 */ public static void initCOS() { // 载入cos参数 Properties ps = org.yeshi.utils.PropertiesUtil .getProperties(SpringContext.class.getClassLoader().getResourceAsStream("cos.properties")); COSInitParams params = new COSInitParams(); params.setAppId(Long.parseLong(ps.getProperty("appId"))); params.setBucketName(ps.getProperty("bucketName")); params.setRegion(ps.getProperty("region")); params.setSecretId(ps.getProperty("secretId")); params.setSecretKey(ps.getProperty("secretKey")); // 初始化 COSManager.getInstance().init(params); } /** * 处理提现结果的队列 */ public void doExtractResult() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = CMQManager.getInstance().consumeExtractResultMsg(1); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { extractService.processExtractResult(map.get(key)); CMQManager.getInstance().deleteExtractResultMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } } }); } /** * 处理淘宝订单 */ public void doTaoBaoOrders() { // 同时开启3个线程处理 for (int i = 0; i < 3; i++) { executor.execute(new Runnable() { @Override public void run() { while (true) { try { // 取16个订单 List orderIds = CMQManager.getInstance().consumeTaoBaoOrderMsg(16); if (orderIds != null) { for (String orderId : orderIds) { if (NumberUtil.isNumeric(orderId.trim())) { Map> map = new HashMap<>(); List orderList = taoBaoOrderService .getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("开始处理订单:" + orderId); orderProcessService.processOrder(map); LogHelper.orderInfo("结束处理订单:" + orderId); } } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { } } } } }); } } /** * 刚刚产生的订单 */ public void doTaoBaoNewOrders() { // 同时开启3个线程处理 for (int i = 0; i < 1; i++) { executor.execute(new Runnable() { @Override public void run() { while (true) { try { // 取16个订单 List orderIds = CMQManager.getInstance().consumeTaoBaoNewOrderMsg(16); Map> map = new HashMap<>(); if (orderIds != null) { for (String orderId : orderIds) { List orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("新订单-开始处理订单:" + orderId); long startTime = System.currentTimeMillis(); orderProcessService.processOrder(map); LogHelper.orderInfo("新订单-结束处理订单:" + orderId + "- 处理时间:" + (System.currentTimeMillis() - startTime)); } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { } } } } }); } } /** * 处理新版淘宝订单返利 */ public void doOrderFanLiNew() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = CMQManager.getInstance().consumeFanLiMsgNew(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { HongBaoV2 hongbao = map.get(handler); if (hongbao != null) { String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.hongBaoFanLi, hongbao.getId() + ""); if (StringUtil.isNullOrEmpty(redisManager.getCommonString(key))) { // 处理之后要隔2小时再次进行处理 redisManager.cacheCommonString(key, "1", 60 * 60 * 2); orderProcessService.fanli(map.get(handler)); } } CMQManager.getInstance().deleteFanLiMsgNew(handler); } catch (TaoBaoWeiQuanException e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } catch (Exception e) { try { LogHelper.errorDetailInfo(e, "HongBaoV2-ID:" + map.get(handler).getId(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } } }); } /** * 处理团队订单返利 */ public void doOrderTeamIncomePreFanLi() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = TeamOrderCMQManager.getInstance() .consumeFanLiTeamIncomePreMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); orderProcessService.fanliPreInvaite(dto.getUid(), dto.getDate()); TeamOrderCMQManager.getInstance().deleteTeamIncomePreMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, map.get(handler).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } } }); } /** * 处理团队订单返利 */ public void doOrderTeamIncomeFanLi() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = TeamOrderCMQManager.getInstance().consumeFanLiTeamIncomeMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); teamEincomeManager.addTeamIncomeTOUserAccount(dto.getDate(), dto.getUid()); TeamOrderCMQManager.getInstance().deleteTeamIncomeMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, map.get(handler).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } } }); } /** * 处理分享订单返利 */ public void doOrderShareFanLi() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = CMQManager.getInstance().consumeFanLiShareMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { UidDateDTO dto = map.get(handler); orderProcessService.fanliShare(dto.getUid(), dto.getDate()); CMQManager.getInstance().deleteFanLiShareMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e, map.get(handler).toString(), ""); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } } }); } /** * 处理淘宝订单维权 */ public void doWeiQuanOrder() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = CMQManager.getInstance().consumeWeiQuanOrderMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String handler = its.next(); try { orderProcessService.weiQuanOrder(map.get(handler)); CMQManager.getInstance().deleteWeiQuanOrderMsg(handler); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { } } } }); } /** * IOS 推送消息 */ public void doPushIOS() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = CMQManager.getInstance().consumeIOSPushMsg(10); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { iosPushService.readyPushIOS(map.get(key)); CMQManager.getInstance().deleteIOSPushMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } }); } /** * 创建Scheduler()执行自动爬取 */ private void initScheduler() { boutiqueAutoRuleService.startScheduler(); } /** * 更新精选库商品 */ public void doUpdateGoodsJob() { for (int i = 0; i < 1; i++) executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = CMQManager.getInstance().consumeNeedUpdateTaoBaoGoodsIdMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); taoBaoGoodsUpdateService.updateByTaoKeGoodsDetail(Long.parseLong(key)); CMQManager.getInstance().deleteNeedUpdateTaoBaoGoodsIdMsg(key); } } } catch (Exception e) { e.printStackTrace(); LogHelper.error("更新商品出错:" + e.getMessage()); } } } }); } /** * 用户借贷处理 */ public void doUserMoneyDebtJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = UserMoneyChangeCMQManager.getInstance() .consumeQueueMsg(UserMoneyChangeCMQManager.QUEUE_DEBT, 16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { UserMoneyChangeDTO dto = map.get(key); if (dto != null && dto.getChangeMoney().compareTo(new BigDecimal(0)) > 0) { userMoneyDebtService.repayDebt(dto.getUid()); } UserMoneyChangeCMQManager.getInstance() .deleteQueueMsg(UserMoneyChangeCMQManager.QUEUE_DEBT, key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.error("还款出错:" + e.getMessage()); } } } }); } public void doJDOrderJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = JDOrderCMQManager.getInstance().consumeJDOrder(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { JDOrder order = jdOrderService.selectDetailByOrderId(Long.parseLong(orderId)); orderProcessService.processJDOrder(order); } JDOrderCMQManager.getInstance().deleteJDOrder(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } } } catch (Exception e) { LogHelper.error("拼多多订单出错:" + e.getMessage()); } } } }); } public void doPDDOrderJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { try { Map map = PDDOrderCMQManager.getInstance().consumePDDOrder(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { String orderId = map.get(key); if (!StringUtil.isNullOrEmpty(orderId)) { List orderList = pddOrderService.selectByOrderSn(orderId); if (orderList != null) for (PDDOrder order : orderList) orderProcessService.processPDDOrder(order); } PDDOrderCMQManager.getInstance().deletePDDOrder(key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } catch (Exception e) { LogHelper.error("拼多多订单:" + e.getMessage()); } } } }); } /** * 重要的淘宝商品信息更新 */ public void doImportantTaoBaoGoodsUpdateJob() { // 开启2个线程做更新 for (int i = 0; i < 2; i++) executor.execute(new Runnable() { @Override public void run() { while (true) { Map map = CMQManager.getInstance().consumeTBImpGoodsUpdateMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); try { long startTime = System.currentTimeMillis(); TaoBaoGoodsBrief goods = TaoKeApiUtil.searchGoodsDetail(map.get(key)); // 更新一条数据需要的时间 taoBaoGoodsUpdateService.updateTaoBaoGoods(goods); long time = System.currentTimeMillis() - startTime; LogHelper.test("淘宝重要商品库更新时间:" + time); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { CMQManager.getInstance().deleteTBImpGoodsUpdateMsg(key); } } } } } }); } /** * 红包到账后的金币获取 */ public void doHongBaoRecieveIntegralGetJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { Map map = HongBaoRecieveCMQManager.getInstance() .consumeQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, 16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); Long hongBaoId = map.get(key); try { HongBaoV2 hongBaoV2 = hongBaoV2Service.selectByPrimaryKey(hongBaoId); if (hongBaoV2 != null && hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU && hongBaoV2.getMoney().compareTo(new BigDecimal(0)) > 0) { // 到账送金币 fanliGetIntegral(hongBaoV2); HongBaoRecieveCMQManager.getInstance() .deleteQueueMsg(HongBaoRecieveCMQManager.QUEUE_INTEGRAL, key); // 返利不足0.01元送金币 if (hongBaoV2.getType() == HongBaoV2.TYPE_ZIGOU) {// 自购 // 判断是否为该用户的首笔红包 List typeList = new ArrayList<>(); typeList.add(HongBaoV2.TYPE_ZIGOU); HongBaoV2 firstHongBao = hongBaoV2Service.getFirstValidHongBaoByTypeAndUid( typeList, hongBaoV2.getUserInfo().getId()); if (firstHongBao != null && firstHongBao.getId().longValue() == hongBaoV2.getId()) {// 自购首单到账 // 查询下级红包 BigDecimal firstLevelMoney = new BigDecimal(0); BigDecimal secondLevelMoney = new BigDecimal(0); // 获取改单下面的红包 List hongBaoList = new ArrayList<>(); HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByHongBaoId(hongBaoV2.getId()); if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {// 计算改订单号下面的所有返利金额 CommonOrder commonOrder = hongBaoOrder.getCommonOrder(); List list = commonOrderService.listBySourceTypeAndOrderId( commonOrder.getSourceType(), commonOrder.getOrderNo()); for (CommonOrder co : list) { HongBaoOrder hbo = hongBaoOrderService .selectDetailByCommonOrderId(co.getId()); if (hbo != null && hbo.getHongBaoV2() != null) hongBaoList.add(hbo.getHongBaoV2()); } } for (HongBaoV2 hb : hongBaoList) { List children = hongBaoV2Service .listChildrenById(hb.getId()); if (children != null) for (HongBaoV2 child : children) if (child.getType() == HongBaoV2.TYPE_YIJI) { firstLevelMoney = firstLevelMoney.add(child.getMoney()); } else if (child.getType() == HongBaoV2.TYPE_ERJI) { secondLevelMoney = secondLevelMoney.add(child.getMoney()); } } // 查询下级的生效时间 ThreeSale threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( hongBaoV2.getUserInfo().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil.convertToTimeTemp("20190901", "yyyyMMdd")) { if (firstLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 一级返利小于0.01 integralTaskRecordService.firstRebateOrderRewardBoss( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("自购-一级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } // 查询下下级生效时间 if (threeSale != null) { threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( threeSale.getBoss().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil .convertToTimeTemp("20190901", "yyyyMMdd")) { if (secondLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 二级返利小于0.01 integralTaskRecordService.firstRebateOrderRewardBossSuper( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("自购-二级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } } } } else if (hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_GOODS) {// 分享赚 // 判断是否为该用户的首笔红包 List typeList = new ArrayList<>(); typeList.add(HongBaoV2.TYPE_SHARE_GOODS); HongBaoV2 firstHongBao = hongBaoV2Service.getFirstValidHongBaoByTypeAndUid( typeList, hongBaoV2.getUserInfo().getId()); if (firstHongBao != null && firstHongBao.getId().longValue() == hongBaoV2.getId()) // 分享首笔到账 { // 查询下级红包 BigDecimal firstLevelMoney = new BigDecimal(0); // 获取改单下面的红包 List hongBaoList = new ArrayList<>(); HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByHongBaoId(hongBaoV2.getId()); if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {// 计算改订单号下面的所有返利金额 CommonOrder commonOrder = hongBaoOrder.getCommonOrder(); List list = commonOrderService.listBySourceTypeAndOrderId( commonOrder.getSourceType(), commonOrder.getOrderNo()); for (CommonOrder co : list) { HongBaoOrder hbo = hongBaoOrderService .selectDetailByCommonOrderId(co.getId()); if (hbo != null && hbo.getHongBaoV2() != null) hongBaoList.add(hbo.getHongBaoV2()); } } for (HongBaoV2 hb : hongBaoList) { List children = hongBaoV2Service .listChildrenById(hb.getId()); if (children != null) for (HongBaoV2 child : children) if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) { firstLevelMoney = firstLevelMoney.add(child.getMoney()); } } ThreeSale threeSale = threeSaleSerivce.selectLatestByWorkerIdAndState( hongBaoV2.getUserInfo().getId(), ThreeSale.STATE_SUCCESS); if (threeSale != null && threeSale.getSucceedTime() != null && threeSale .getSucceedTime() < hongBaoV2.getCreateTime().getTime()) {// 邀请成功的时间是否在下单的时间之前 // 成功时间要大于20190910日才开始送金币 if (threeSale.getSucceedTime() > TimeUtil.convertToTimeTemp("20190901", "yyyyMMdd")) { if (firstLevelMoney.compareTo(new BigDecimal("0.01")) < 0) {// 一级返利小于0.01 integralTaskRecordService.firstSharerOrderRewardBoss( threeSale.getBoss().getId(), hongBaoV2.getUserInfo().getId(), null); LogHelper.test("分享-一级用户-" + threeSale.getBoss().getId() + "-hongBaoId:" + hongBaoV2.getId()); } } } } } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } } }); } private void fanliGetIntegral(HongBaoV2 hongBaoV2) { if (hongBaoV2 != null && hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU && hongBaoV2.getMoney().compareTo(new BigDecimal(0)) > 0) { // 查询对应的订单号 Long mainHongBaoId = hongBaoV2.getId(); if (hongBaoV2.getParent() != null && hongBaoV2.getParent().getId() != null) mainHongBaoId = hongBaoV2.getParent().getId(); HongBaoOrder hongbaoOrder = hongBaoOrderService.selectDetailByHongBaoId(mainHongBaoId); if (hongbaoOrder == null || hongbaoOrder.getCommonOrder() == null) return; CommonOrder commonOrder = hongbaoOrder.getCommonOrder(); if (hongBaoV2.getType() == HongBaoV2.TYPE_ZIGOU) {// 自购订单 integralGetService.addRebateOrder(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_GOODS) {// 分享订单 integralGetService.addShareOrder(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 一级邀请 integralGetService.addInviteOrderLevelOne(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } else if (hongBaoV2.getType() == HongBaoV2.TYPE_ERJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 二级邀请 integralGetService.addInviteOrderLevelTwo(hongBaoV2.getUserInfo().getId(), commonOrder.getOrderNo(), commonOrder.getSourceType()); } } } private boolean isFirstValidOrder(String orderId, int sourceType, Long uid) { CommonOrder commonOrder = commonOrderService.selectLatestValidByUid(uid); if (commonOrder != null && commonOrder.getOrderNo().equalsIgnoreCase(orderId) && sourceType == commonOrder.getSourceType()) return true; else return false; } // 下单获取金币任务 public void doPlaceOrderIntegralJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { Map map = PlaceOrderCMQManager.getInstance() .consumeQueueMsg(PlaceOrderCMQManager.QUEUE_INTEGRAL, 16); if (map != null) { for (Iterator its = map.keySet().iterator(); its.hasNext();) { try { String key = its.next(); Order order = map.get(key); // 是否是首单 if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) { // 统计订单下的用户所获得的返利金额 List list = commonOrderService .listBySourceTypeAndOrderId(order.getOrderType(), order.getOrderId()); Map hongBaoMoney = new HashMap<>(); if (list != null) for (CommonOrder commonOrder : list) { HongBaoOrder hongBaoOrder = hongBaoOrderService .selectDetailByCommonOrderId(commonOrder.getId()); if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) { Long mainUid = hongBaoOrder.getHongBaoV2().getUserInfo().getId(); if (hongBaoMoney.get(mainUid) == null) hongBaoMoney.put(mainUid, new BigDecimal(0)); hongBaoMoney.put(mainUid, hongBaoMoney.get(mainUid) .add(hongBaoOrder.getHongBaoV2().getMoney())); // 查询上级 List children = hongBaoV2Service .listChildrenById(hongBaoOrder.getHongBaoV2().getId()); if (children != null) { for (HongBaoV2 hongBao : children) { Long uid = hongBao.getUserInfo().getId(); if (hongBaoMoney.get(uid) == null) hongBaoMoney.put(uid, new BigDecimal(0)); hongBaoMoney.put(uid, hongBaoMoney.get(uid).add(hongBao.getMoney())); } } } } if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) {// 有效的首单 if (hongBaoMoney.get(order.getUserInfo().getId()) == null || hongBaoMoney .get(order.getUserInfo().getId()).compareTo(new BigDecimal("0")) <= 0) { // 分享奖金是0 integralTaskRecordService.firstShareOrderReward(order.getUserInfo().getId(), null); } // 获取上两级数据 UserInfo boss = threeSaleSerivce.getBoss(order.getUserInfo().getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney.get(boss.getId()) .compareTo(new BigDecimal("0")) <= 0) { // 补偿金币 integralTaskRecordService.firstSharerOrderRewardBoss(boss.getId(), order.getUserInfo().getId(), null); } } } else {// 自购订单 UserInfo boss = threeSaleSerivce.getBoss(order.getUserInfo().getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney.get(boss.getId()) .compareTo(new BigDecimal("0")) <= 0) { // 补偿金币1级 integralTaskRecordService.firstRebateOrderRewardBoss(boss.getId(), order.getUserInfo().getId(), null); } boss = threeSaleSerivce.getBoss(boss.getId()); if (boss != null) {// 判断上级的红包 if (hongBaoMoney.get(boss.getId()) == null || hongBaoMoney .get(boss.getId()).compareTo(new BigDecimal("0")) <= 0) { // 补偿金币2级 integralTaskRecordService.firstRebateOrderRewardBossSuper( boss.getId(), order.getUserInfo().getId(), null); } } } } } PlaceOrderCMQManager.getInstance().deleteQueueMsg(PlaceOrderCMQManager.QUEUE_INTEGRAL, key); } catch (Exception e) { LogHelper.errorDetailInfo(e); } } } } } }); } // 抖音广告监控 public void doPlaceOrderAdJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { Map map = PlaceOrderCMQManager.getInstance() .consumeQueueMsg(PlaceOrderCMQManager.QUEUE_AD, 16); if (map != null) { // 是否是首单 for (Iterator its = map.keySet().iterator(); its.hasNext();) { String key = its.next(); Order order = map.get(key); if (isFirstValidOrder(order.getOrderId(), order.getOrderType(), order.getUserInfo().getId())) {// 有效的首单 // TODO 抖音的数据回调 } } } } } }); } @Resource private DouYinClickEventService douYinClickEventService; // 抖音 public void doDouYinDeviceActiveJob() { LogHelper.test("开始执行:doDouYinDeviceActiveJob"); executor.execute(new Runnable() { @Override public void run() { LogHelper.test("开始执行:doDouYinDeviceActiveJob-run"); while (true) { Map map = DouYinDeviceActiveCMQManager.getInstance() .consume(16); if (map != null) { // 是否是首单 for (Iterator its = map.keySet().iterator(); its.hasNext();) { String key = its.next(); DouYinDeviceActiveQueueDTO active = map.get(key); if (active.getType() == DouYinDeviceActiveQueueDTO.TYPE_AD) {// 抖音 DouYinClickEvent event = douYinClickEventService.selectByCallback(active.getCallback()); if (event != null) { if (event.getOs() == 0 && !StringUtil.isNullOrEmpty(event.getUuid())) { DeviceActive deviceActive = deviceActiveService .getFirstActiveInfoByImei(event.getUuid()); if (deviceActive != null) { if (event != null) { if (event.getOs() == 0) DouYinAdUtil.activeAndroid(event.getCallback(), event.getImei(), deviceActive.getCreateTime().getTime()); else if (event.getOs() == 1) DouYinAdUtil.activeIOS(event.getCallback(), event.getIdfa(), deviceActive.getCreateTime().getTime()); } } } else {// TODO 处理IOS } } } else if (active.getType() == DouYinDeviceActiveQueueDTO.TYPE_DEVICE) {// 设备 if (active.getPlatform() == 1) { DeviceActive deviceActive = deviceActiveService .getFirstActiveInfo(active.getDevice()); if (deviceActive != null && !StringUtil.isNullOrEmpty(deviceActive.getImei())) { DouYinClickEvent event = douYinClickEventService .selectByUuid(deviceActive.getImei()); if (event != null) {// 回调 if (deviceActive != null) DouYinAdUtil.activeAndroid(event.getCallback(), event.getImei(), deviceActive.getCreateTime().getTime()); } } } else { // TODO 兼容IOS } } DouYinDeviceActiveCMQManager.getInstance().delete(key); } } } } }); } // 分红 public void doDividentsPreJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { Map map = TeamOrderCMQManager.getInstance().consumeTeamDividentsPreMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); UidDateDTO dto = map.get(key); try { teamDividentsManager.addToTeamEincome(dto.getUid(), dto.getDate()); TeamOrderCMQManager.getInstance().deleteTeamDividentsPreMsg(key); } catch (TeamDividentsRecordException e1) { if (e1.getCode() == TeamDividentsRecordException.CODE_EXIST) { TeamOrderCMQManager.getInstance().deleteTeamDividentsPreMsg(key); } else { try { LogHelper.errorDetailInfo(e1); } catch (Exception e2) { e2.printStackTrace(); } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } } }); } // 分红 public void doDividentsJob() { executor.execute(new Runnable() { @Override public void run() { while (true) { Map map = TeamOrderCMQManager.getInstance().consumeTeamDividentsMsg(16); if (map != null) { Iterator its = map.keySet().iterator(); while (its.hasNext()) { String key = its.next(); UidDateDTO dto = map.get(key); try { teamEincomeManager.addTeamDividentsTOUserAccount(dto.getDate(), dto.getUid()); TeamOrderCMQManager.getInstance().deleteTeamDividentsMsg(key); } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } finally { } } } } } }); } }