yujian
2019-08-27 d8359ddb48dab5cc797a9d552e11fde571f4920c
fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.util;
import java.util.ArrayList;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -12,25 +13,40 @@
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.money.UserMoneyChangeDTO;
import com.yeshi.fanli.entity.bus.user.AlipayTransferResultInfo;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.jd.JDOrder;
import com.yeshi.fanli.entity.pdd.PDDOrder;
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.TaoBaoWeiQuanException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.jd.JDOrderService;
import com.yeshi.fanli.service.inter.lable.BoutiqueAutoRuleService;
import com.yeshi.fanli.service.inter.lable.LabelService;
import com.yeshi.fanli.service.inter.lable.QualityFactoryService;
import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
import com.yeshi.fanli.service.inter.order.OrderProcessService;
import com.yeshi.fanli.service.inter.pdd.PDDOrderService;
import com.yeshi.fanli.service.inter.push.IOSPushService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
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.JDOrderCMQManager;
import com.yeshi.fanli.util.cmq.PDDOrderCMQManager;
import com.yeshi.fanli.util.cmq.ThreeSaleCMQManager;
import com.yeshi.fanli.util.cmq.UserMoneyChangeCMQManager;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
/**
 * 系统初始化
@@ -63,11 +79,28 @@
   private OrderProcessService orderProcessService;
   @Resource
   private QualityFactoryService qualityFactoryService;
   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;
   private static boolean isInited = false;
@@ -91,14 +124,20 @@
      if (Constant.IS_TASK) {
         doExtractResult();// 处理提现结果
         doTaoBaoOrders();// 处理淘宝订单
         doTaoBaoNewOrders();// 处理淘宝订单(刚刚产生的)
         doOrderFanLiNew();// 新版返利
         doOrderTiChengFanLi();// 处理订单提成返利
         doWeiQuanOrder();// 处理维权订单
         doPushIOS();// 处理发送IOS消息
      } else if (!Constant.IS_TEST) {
         initScheduler();// 启动定时任务
         // doUpdateGoodsJob();
         doThreeSaleUserCouponJob();// 处理邀请队列
         doUserMoneyDebtJob();// 债务偿还
         initScheduler();// 启动商品更新定时任务
         doUpdateGoodsJob(); // 更新商品队列
         doJDOrderJob();// 京东订单处理
         doPDDOrderJob();// 拼多多订单处理
         doImportantTaoBaoGoodsUpdateJob();// 淘宝重要商品的信息更新
      }
   }
   /**
@@ -166,10 +205,60 @@
            public void run() {
               while (true) {
                  try {
                     // 取16个订单
                     Map<String, List<TaoBaoOrder>> map = CMQManager.getInstance().consumeTaoBaoOrderMsg(16);
                     if (map != null) {
                        orderProcessService.processOrder(map);
                     List<String> orderIds = CMQManager.getInstance().consumeTaoBaoOrderMsg(16);
                     if (orderIds != null) {
                        for (String orderId : orderIds) {
                           if (NumberUtil.isNumeric(orderId.trim())) {
                              Map<String, List<TaoBaoOrder>> map = new HashMap<>();
                              List<TaoBaoOrder> 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<String> orderIds = CMQManager.getInstance().consumeTaoBaoNewOrderMsg(16);
                     Map<String, List<TaoBaoOrder>> map = new HashMap<>();
                     if (orderIds != null) {
                        for (String orderId : orderIds) {
                           List<TaoBaoOrder> 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 {
@@ -199,7 +288,15 @@
                     while (its.hasNext()) {
                        String handler = its.next();
                        try {
                           orderProcessService.fanli(map.get(handler));
                           HongBaoV2 hongbao = map.get(handler);
                           if (hongbao != null) {
                              String key = "hongbao-fanli-" + 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 {
@@ -209,7 +306,7 @@
                           }
                        } catch (Exception e) {
                           try {
                              LogHelper.errorDetailInfo(e);
                              LogHelper.errorDetailInfo(e, "HongBaoV2-ID:" + map.get(handler).getId(), "");
                           } catch (Exception e1) {
                              e1.printStackTrace();
                           }
@@ -251,7 +348,7 @@
                           }
                        } catch (Exception e) {
                           try {
                              LogHelper.errorDetailInfo(e);
                              LogHelper.errorDetailInfo(e, map.get(handler).toString(), "");
                           } catch (Exception e1) {
                              e1.printStackTrace();
                           }
@@ -336,7 +433,7 @@
                     }
                  }
               } catch (Exception e) {
                  LogHelper.errorDetailInfo(e);
               }
            }
         }
@@ -351,43 +448,28 @@
      boutiqueAutoRuleService.startScheduler();
   }
   /**
    * 更新精选库商品
    */
   public void doUpdateGoodsJob() {
      // 采用4个线程做更新
      for (int i = 0; i < 1; i++)
         executor.execute(new Runnable() {
            @Override
            public void run() {
               while (true) {
                  try {
                     Map<String, Long> map = CMQManager.getInstance().consumeNeedUpdateTaoBaoGoodsIdMsg(16);
                     if (map != null) {
                        Iterator<String> its = map.keySet().iterator();
                        while (its.hasNext()) {
                           String key = its.next();
                           try {
                              Long goodsId = map.get(key);
                              List<Long> list = new ArrayList<>();
                              list.add(goodsId);
                              qualityFactoryService.updateGoodsFactory(list);
                              CMQManager.getInstance().deleteNeedUpdateTaoBaoGoodsIdMsg(key);
                           } catch (Exception e) {
                              try {
                                 LogHelper.errorDetailInfo(e);
                              } catch (Exception e1) {
                                 e1.printStackTrace();
                              }
                           }
                           taoBaoGoodsUpdateService.updateByTaoKeGoodsDetail(Long.parseLong(key));
                           CMQManager.getInstance().deleteNeedUpdateTaoBaoGoodsIdMsg(key);
                        }
                     }
                  } catch (Exception e) {
                     e.printStackTrace();
                     LogHelper.error("更新商品出错:" + e.getMessage());
                  }
               }
            }
@@ -407,10 +489,8 @@
               while (true) {
                  try {
                     Map<String, ThreeSale> map = ThreeSaleCMQManager.getInstance()
                           .consumeQueueMsg(ThreeSaleCMQManager.QUEUE_USER_COUPON, 16);
                     if (map != null) {
                        Iterator<String> its = map.keySet().iterator();
@@ -418,11 +498,21 @@
                           String key = its.next();
                           try {
                              ThreeSale threeSale = map.get(key);
                              if (threeSale != null)
                                 threeSale = threeSaleSerivce.selectByPrimaryKey(threeSale.getId());
                              if (threeSale != null) {
                                 if (threeSale.getState() != null && threeSale.getState() == true) {
                                    // 邀请成功  - 券激活生效
                                    // 邀请成功 - 券激活生效
                                    LogHelper.test("doThreeSaleUserCouponJob-" + threeSale.getId());
                                    Long bossId = threeSale.getBoss().getId();
                                    userSystemCouponService.activatedWelfareFreeCoupon(bossId);
                                    // 下级昵称
                                    String workerNickName = userInfoService
                                          .selectByPKey(threeSale.getWorker().getId()).getNickName();
                                    userSystemCouponService.activatedWelfareFreeCoupon(bossId,
                                          workerNickName);
                                 }
                              }
                              ThreeSaleCMQManager.getInstance()
@@ -445,4 +535,155 @@
         });
   }
   /**
    * 用户借贷处理
    */
   public void doUserMoneyDebtJob() {
      executor.execute(new Runnable() {
         @Override
         public void run() {
            while (true) {
               try {
                  Map<String, UserMoneyChangeDTO> map = UserMoneyChangeCMQManager.getInstance()
                        .consumeQueueMsg(UserMoneyChangeCMQManager.QUEUE_DEBT, 16);
                  if (map != null) {
                     Iterator<String> 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<String, String> map = JDOrderCMQManager.getInstance().consumeJDOrder(16);
                  if (map != null) {
                     Iterator<String> 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<String, String> map = PDDOrderCMQManager.getInstance().consumePDDOrder(16);
                  if (map != null) {
                     Iterator<String> its = map.keySet().iterator();
                     while (its.hasNext()) {
                        String key = its.next();
                        try {
                           String orderId = map.get(key);
                           if (!StringUtil.isNullOrEmpty(orderId)) {
                              List<PDDOrder> 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<String, Long> map = CMQManager.getInstance().consumeTBImpGoodsUpdateMsg(16);
                  if (map != null) {
                     Iterator<String> 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);
                        }
                     }
                  }
               }
            }
         });
   }
}