yujian
2019-03-27 cdcbed9af813b2a02cdc01eefa24db8bec6b51a9
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -17,36 +17,28 @@
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.AccountDetailsMapper;
import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper;
import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
import com.yeshi.fanli.dao.mybatis.MoneyRecordMapper;
import com.yeshi.fanli.dao.mybatis.PidOrderMapper;
import com.yeshi.fanli.dao.mybatis.ThreeSaleGiftMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.hongbao.HongBaoMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderMapper;
import com.yeshi.fanli.dao.mybatis.share.PidUserMapper;
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper;
import com.yeshi.fanli.entity.bus.user.AccountDetails;
import com.yeshi.fanli.entity.bus.user.HongBao;
import com.yeshi.fanli.dto.HongBao;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.Order;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.taobao.PidOrder;
import com.yeshi.fanli.entity.taobao.PidUser;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.HongBaoException;
import com.yeshi.fanli.exception.ObjectStateException;
import com.yeshi.fanli.exception.OrderItemException;
import com.yeshi.fanli.exception.TaoBaoWeiQuanException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
@@ -54,32 +46,27 @@
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.hongbao.AccountDetailsHongBaoMapService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.LostOrderService;
import com.yeshi.fanli.service.inter.order.OrderItemServcie;
import com.yeshi.fanli.service.inter.order.OrderProcessService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.order.PidOrderService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService;
import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.service.inter.user.UserNotificationService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.AccountDetailsFactory;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
@Service
public class OrderProcessServiceImpl implements OrderProcessService {
   @Resource
   private PidOrderMapper pidOrderMapper;
   @Resource
   private OrderMapper orderMapper;
@@ -88,37 +75,13 @@
   private PidUserMapper pidUserMapper;
   @Resource
   private HongBaoService hongBaoService;
   @Resource
   private OrderItemServcie orderItemService;
   @Resource
   private PidOrderService pidOrderService;
   @Resource
   private UserInfoMapper userInfoMapper;
   @Resource
   private OrderItemMapper orderItemMapper;
   @Resource
   private HongBaoMapper hongBaoMapper;
   @Resource
   private HongBaoManageMapper hongBaoManageMapper;
   @Resource
   private AccountDetailsMapper accountDetailsMapper;
   @Resource
   private AccountMessageMapper accountMessageMapper;
   @Resource
   private MoneyRecordMapper moneyRecordMapper;
   @Resource
   private ThreeSaleGiftMapper threeSaleGiftMapper;
   @Resource
   private OrderService orderService;
@@ -162,6 +125,12 @@
   @Resource
   private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
   @Resource
   private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
   @Resource
   private UserSystemCouponService userSystemCouponService;
   @Override
   public void processOrder(Map<String, List<TaoBaoOrder>> orders) {
      List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID);
@@ -169,24 +138,30 @@
      // 分离出返利订单与分享赚订单
      Iterator<String> its = orders.keySet().iterator();
      Map<String, List<TaoBaoOrder>> fanliOrderMap = new HashMap<>();
      Map<String, List<PidOrder>> sharePidOrderMap = new HashMap<>();
      Map<String, List<TaoBaoOrder>> shareOrderMap = new HashMap<>();
      while (its.hasNext()) {
         String orderId = its.next();
         if (orders.get(orderId) != null && orders.get(orderId).size() > 0) {
            List<TaoBaoOrder> list = orders.get(orderId);
            String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(),
                  list.get(0).getSourceMediaId(), list.get(0).getAdPositionId());
            PidUser pidUser = pidUserMapper.selectByPid(pid);
            if (pidUser != null && pidUser.getType() == PidUser.TYPE_SHARE_GOODS) {// 商品分享订单
               // List<PidOrder> pidOrderList = new ArrayList<>();
               // for (TaoBaoOrder order : list) {
               // pidOrderList.add(TaoBaoOrderUtil.convertToPidOrder(order));
               // }
               // sharePidOrderMap.put(orderId, pidOrderList);
            if (!StringUtil.isNullOrEmpty(list.get(0).getRelationId())) {
               shareOrderMap.put(orderId, list);
            } else {// 普通返利订单
            } else if (!StringUtil.isNullOrEmpty(list.get(0).getSpecialId())) {
               fanliOrderMap.put(orderId, list);
            } else {
               String pid = String.format("mm_%s_%s_%s", configList.get(0).getAccountId(),
                     list.get(0).getSourceMediaId(), list.get(0).getAdPositionId());
               PidUser pidUser = pidUserMapper.selectByPid(pid);
               if (pidUser != null && pidUser.getType() == PidUser.TYPE_SHARE_GOODS) {// 商品分享订单
                  // List<PidOrder> pidOrderList = new ArrayList<>();
                  // for (TaoBaoOrder order : list) {
                  // pidOrderList.add(TaoBaoOrderUtil.convertToPidOrder(order));
                  // }
                  // sharePidOrderMap.put(orderId, pidOrderList);
                  shareOrderMap.put(orderId, list);
               } else {// 普通返利订单
                  fanliOrderMap.put(orderId, list);
               }
            }
         }
      }
@@ -275,7 +250,16 @@
         Iterator<String> its = orders.keySet().iterator();
         while (its.hasNext()) {
            String orderId = its.next();
            processShareGoodsOrderNew(orderId, orders.get(orderId));
            try {
               processShareGoodsOrderNew(orderId, orders.get(orderId));
            } catch (Exception e) {
               try {
                  LogHelper.errorDetailInfo(e, "processShareGoodsOrderNew出错", "订单号:" + orderId);
               } catch (Exception e1) {
                  e1.printStackTrace();
               }
            }
         }
      }
   }
@@ -461,31 +445,27 @@
         // 将自己添加到用户
         Long uid = its.next();
         BigDecimal money = userMoney.get(uid);
         userInfoMapper.addHongBaoByUid(uid, money);
         AccountDetails accountDetails = AccountDetailsFactory.create("+" + money, AccountDetailsFactory.FANLI, null,
               null, new UserInfo(uid));
         accountDetailsMapper.insertSelective(accountDetails);
         UserMoneyDetail userMoneyDetail = null;
         // 插入新版资金明细
         try {
            UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLi(uid,
                  hongBaoOrder.getCommonOrder().getOrderNo(), hongBaoOrder.getCommonOrder().getSourceType(), null,
                  money);
            userMoneyDetail.setId(accountDetails.getId());
            userMoneyDetailMapper.insert(userMoneyDetail);
            userMoneyDetail = UserMoneyDetailFactory.createFanLi(uid, hongBaoOrder.getCommonOrder().getOrderNo(),
                  hongBaoOrder.getCommonOrder().getSourceType(), null, money);
         } catch (UserMoneyDetailException e1) {
            try {
               LogHelper.errorDetailInfo(e1);
               LogHelper.errorDetailInfo(e1, "订单号:" + hongBaoOrder.getCommonOrder().getOrderNo(), "");
            } catch (Exception e2) {
               e2.printStackTrace();
            }
         }
         userMoneyDetailMapper.insert(userMoneyDetail);
         // 添加资金明细与红包的映射关系
         for (HongBaoV2 v2 : userHongBao.get(uid)) {
            accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(v2.getId(), accountDetails.getId());
            accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(v2.getId(), userMoneyDetail.getId());
         }
         // 增加用户资金
         userInfoMapper.addHongBaoByUid(uid, money);
         // 站内信+推送
         UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
@@ -503,7 +483,12 @@
         // 新版通知
         userMoneyMsgNotificationService.fanliOrderReceived(uid, hongBaoOrder.getCommonOrder().getOrderNo(),
               userGoodsCount.get(uid), money, user.getMyHongBao());
      }
      // 通知免单到账
      try {
         userSystemCouponService.updateStateByArrivalAccount(hongBaoOrder.getCommonOrder().getOrderNo());
      } catch (Exception e) {
         e.printStackTrace();
      }
      // 维权扣款(2018-08-05后开始实行)
@@ -536,12 +521,6 @@
      if (order.getJieSuanTime().getTime() >= TimeUtil.convertToTimeTemp("2018-08-05", "yyyy-MM-dd")) {
         return;
      }
      try {
         orderService.failureOrderWithWeiQuan(order.getOrderId(), Order.ORDER_TYPE_TAOBAO);
      } catch (ObjectStateException e) {
         e.printStackTrace();
      }
      pidOrderService.weiQuan(order.getOrderId());
   }
   @Override
@@ -682,10 +661,6 @@
      // 邀请赚到账
      if (invitemoney.compareTo(new BigDecimal(0)) > 0) {
         userInfoMapper.addHongBaoByUid(uid, invitemoney);
         // 添加记录
         AccountDetails accountDetails = AccountDetailsFactory.create("+" + invitemoney,
               AccountDetailsFactory.TICHENG, null, null, new UserInfo(uid));
         accountDetailsMapper.insertSelective(accountDetails);
         // 添加新版详情记录
         try {
@@ -706,8 +681,9 @@
            UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInvite(uid, (int) validCount,
                  (int) weiQuanCount, (int) invalidCount, invitemoney, new Date());
            userMoneyDetail.setId(accountDetails.getId());
            userMoneyDetailMapper.insert(userMoneyDetail);
            // 添加到红包返利记录集合
            accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId());
         } catch (UserMoneyDetailException e) {
            try {
               LogHelper.errorDetailInfo(e);
@@ -715,11 +691,6 @@
               e1.printStackTrace();
            }
         }
         // 记录返利红包与资金详情的对应关系
         // 添加到红包返利记录集合
         accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId());
         // 发送推送
         try {
@@ -732,7 +703,7 @@
         // 新版通知
         userMoneyMsgNotificationService.inviteOrderReceived(uid, inviteOrders.size(), inviteGoodsCount, invitemoney,
               userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
               userInfoMapper.selectByPKey(uid).getMyHongBao());
         for (String orderId : drawBackOrders)
            taoBaoWeiQuanDrawBackService.doWeiQuanInvite(orderId);
@@ -786,11 +757,6 @@
      if (sharemoney.compareTo(new BigDecimal(0)) > 0) {
         userInfoMapper.addHongBaoByUid(uid, sharemoney);
         // 添加记录
         AccountDetails accountDetails = AccountDetailsFactory.create("+" + sharemoney,
               AccountDetailsFactory.SHARE_GOODS, null, null, new UserInfo(uid));
         accountDetailsMapper.insertSelective(accountDetails);
         // 添加新版详情记录
         try {
            // 计算本月的有效订单,失效订单,维权订单
@@ -811,8 +777,9 @@
            UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShare(uid, (int) validCount,
                  (int) weiQuanCount, (int) invalidCount, sharemoney, new Date());
            userMoneyDetail.setId(accountDetails.getId());
            userMoneyDetailMapper.insert(userMoneyDetail);
            // 添加到红包返利记录集合
            accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, userMoneyDetail.getId());
         } catch (UserMoneyDetailException e) {
            try {
               LogHelper.errorDetailInfo(e);
@@ -820,10 +787,6 @@
               e1.printStackTrace();
            }
         }
         // 记录返利红包与资金详情的对应关系
         // 添加到红包返利记录集合
         accountDetailsHongBaoMapService.saveAccountDetailsHongBaoMap(hbIdList, accountDetails.getId());
         // 发送推送
         try {
@@ -881,6 +844,25 @@
               // 加入到订单表
               orderMapper.insertSelective(order);
               oldOrder = order;
            } else {
               UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService
                     .getBySpecialId(orderList.get(0).getSpecialId());
               if (info != null && info.getUser() != null) {
                  uid = info.getUser().getId();
                  // 插入到Order中
                  // 添加到订单中去
                  Order order = new Order();
                  order.setBeizhu("PID返利订单");
                  order.setCreatetime(System.currentTimeMillis());
                  order.setOrderId(orderId);
                  order.setOrderType(1);
                  order.setState(Order.STATE_YIZHIFU);
                  order.setUserInfo(new UserInfo(uid));
                  order.setVersion(2);
                  // 加入到订单表
                  orderMapper.insertSelective(order);
                  oldOrder = order;
               }
            }
         } else {
            uid = oldOrder.getUserInfo().getId();
@@ -922,7 +904,7 @@
            hongBaoV2Service.addHongBao(commonOrderList, HongBaoV2.TYPE_ZIGOU);
         } catch (CommonOrderException e) {
            try {
               LogHelper.errorDetailInfo(e, null, "订单号:" + orderId);
               LogHelper.errorDetailInfo(e, "addTaoBaoOrder或addHongBao出错", "订单号:" + orderId);
            } catch (Exception e1) {
               e1.printStackTrace();
            }
@@ -941,6 +923,11 @@
         PidUser pidUser = pidUserMapper.selectByPid(pid);
         if (pidUser != null)
            uid = pidUser.getUid();
         else {
            UserExtraTaoBaoInfo info = userExtraTaoBaoInfoService.getByRelationId(orderList.get(0).getRelationId());
            if (info != null && info.getUser() != null)
               uid = info.getUser().getId();
         }
         // 尚未找到和PID对应的用户
         if (uid == null)