From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/service/manger/order/HongBaoV2AddManager.java | 1913 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 957 insertions(+), 956 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/manger/order/HongBaoV2AddManager.java b/fanli/src/main/java/com/yeshi/fanli/service/manger/order/HongBaoV2AddManager.java
index cfb3dc9..7e6f8d4 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/manger/order/HongBaoV2AddManager.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/manger/order/HongBaoV2AddManager.java
@@ -1,956 +1,957 @@
-package com.yeshi.fanli.service.manger.order;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Resource;
-
-import com.yeshi.fanli.entity.SystemEnum;
-import org.springframework.stereotype.Component;
-
-import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
-import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
-import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
-import com.yeshi.fanli.dto.HongBao;
-import com.yeshi.fanli.dto.order.HongBaoAddResult;
-import com.yeshi.fanli.dto.order.UserTeamLevel;
-import com.yeshi.fanli.entity.bus.user.HongBaoV2;
-import com.yeshi.fanli.entity.bus.user.ThreeSale;
-import com.yeshi.fanli.entity.bus.user.UserInfo;
-import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
-import com.yeshi.fanli.entity.order.CommonOrder;
-import com.yeshi.fanli.entity.order.CommonOrderGoods;
-import com.yeshi.fanli.entity.order.HongBaoOrder;
-import com.yeshi.fanli.exception.order.CommonOrderException;
-import com.yeshi.fanli.exception.order.HongBaoException;
-import com.yeshi.fanli.exception.order.InviteOrderSubsidyException;
-import com.yeshi.fanli.exception.user.UserAccountException;
-import com.yeshi.fanli.service.inter.order.CommonOrderService;
-import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
-import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
-import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
-import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
-import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
-import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
-import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
-import com.yeshi.fanli.service.manger.user.UserLevelManager;
-import com.yeshi.fanli.util.Constant;
-import org.yeshi.utils.MoneyBigDecimalUtil;
-import com.yeshi.fanli.util.TaoBaoConstant;
-import org.yeshi.utils.TimeUtil;
-import com.yeshi.fanli.util.user.UserLevelUtil;
-
-@Component
-public class HongBaoV2AddManager {
-
-    @Resource
-    private UserInfoService userInfoService;
-
-    @Resource
-    private ThreeSaleSerivce threeSaleSerivce;
-
-    @Resource
-    private HongBaoOrderMapper hongBaoOrderMapper;
-
-    @Resource
-    private HongBaoV2Mapper hongBaoV2Mapper;
-
-    @Resource
-    private UserOrderMsgNotificationService userOrderMsgNotificationService;
-
-    @Resource
-    private HongBaoManageService hongBaoManageService;
-
-    @Resource
-    private CommonOrderService commonOrderService;
-
-    @Resource
-    private UserSystemCouponRecordService userSystemCouponRecordService;
-
-    @Resource
-    private UserSystemCouponService userSystemCouponService;
-
-    @Resource
-    private CommonOrderGoodsMapper commonOrderGoodsMapper;
-
-    @Resource
-    private UserVIPInfoService userVIPInfoService;
-
-    @Resource
-    private UserLevelManager userLevelManager;
-
-    @Resource
-    private InviteOrderSubsidyService inviteOrderSubsidyService;
-
-    @Resource
-    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
-
-    /**
-     * 娣诲姞绾㈠寘淇℃伅
-     *
-     * @param commonOrderList
-     * @param type
-     * @return
-     * @throws HongBaoException
-     * @throws UserAccountException
-     * @throws CommonOrderException
-     * @throws OrderTeamRewardException
-     * @throws InviteOrderSubsidyException
-     */
-    public HongBaoAddResult addHongBao(List<CommonOrder> commonOrderList, int type)
-            throws HongBaoException, UserAccountException {
-
-        if (commonOrderList != null && commonOrderList.size() > 0) {
-            int orderType = commonOrderList.get(0).getSourceType();
-            String orderId = commonOrderList.get(0).getOrderNo();
-
-            Map<Integer, HongBaoOrder> notificationMap = new HashMap<>();
-            int goodsCount = 0;
-            boolean hasAdd = false;
-            boolean hasUpdate = false;
-            Set<Integer> stateSet = new HashSet<>();// 璁㈠崟鐘舵�丼et
-
-            UserLevelEnum userLevel = UserLevelUtil.getByOrderRank(commonOrderList.get(0).getUrank());
-
-            if (userLevel == null)
-                userLevel = UserLevelEnum.daRen;
-
-            Date placeOrderDate = commonOrderList.get(0).getThirdCreateTime();
-
-            boolean miandan = false;
-
-            for (CommonOrder commonOrder : commonOrderList) {
-                stateSet.add(commonOrder.getState());
-                goodsCount += commonOrder.getCount();
-                if (commonOrder == null || commonOrder.getId() == null || commonOrder.getUserInfo() == null)
-                    throw new HongBaoException(1, "璁㈠崟淇℃伅涓嶅畬鏁�");
-                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
-                if (hongBaoOrder == null) {
-                    HongBaoSaveResult result = saveHongBao(commonOrder, type, notificationMap, userLevel,
-                            placeOrderDate);
-                    miandan = result.isMiandan();
-                    hasAdd = result.isAdd();
-                } else {
-                    boolean update = updateHongBao(hongBaoOrder, commonOrder, type, notificationMap, placeOrderDate);
-                    if (update) {
-                        hasUpdate = true;
-                    }
-                }
-            }
-
-            int state = getOrderState(stateSet);
-
-            /**
-             * 閫氱煡鐢ㄦ埛鐨勮繑鍒╂儏鍐�
-             */
-
-            // if (!Constant.IS_TEST) {
-            if (hasAdd) {
-                // 鑾峰彇璁㈠崟琛ヨ创
-
-                Iterator<Integer> its = notificationMap.keySet().iterator();
-                while (its.hasNext()) {
-                    Integer t = its.next();
-                    HongBaoV2 notify = notificationMap.get(t).getHongBaoV2();
-                    CommonOrder commonOrder = notificationMap.get(t).getCommonOrder();
-                    Long uid = notify.getUserInfo().getId();
-
-                    BigDecimal money = notify.getMoney();
-                    switch (t) {
-                        case HongBaoV2.TYPE_ZIGOU:
-                            userOrderMsgNotificationService.orderFanLiStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, goodsCount, state, commonOrder.getThirdCreateTime());
-
-                            break;
-                        case HongBaoV2.TYPE_SHARE_GOODS:
-
-                            userOrderMsgNotificationService.orderShareStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, goodsCount, state, commonOrder.getThirdCreateTime());
-
-                            break;
-                        case HongBaoV2.TYPE_YIJI:
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
-                                    commonOrder.getThirdCreateTime());
-
-                            break;
-                        case HongBaoV2.TYPE_ERJI:
-
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
-                                    commonOrder.getThirdCreateTime());
-
-                            break;
-
-                        case HongBaoV2.TYPE_SHARE_YIJI:
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
-                                    commonOrder.getThirdCreateTime());
-                            break;
-                        case HongBaoV2.TYPE_SHARE_ERJI:
-
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
-                                    commonOrder.getThirdCreateTime());
-
-                            break;
-
-                    }
-                }
-                // }
-            }
-
-            int resultCode = 0;
-            if (hasAdd && hasUpdate)
-                return new HongBaoAddResult(HongBaoAddResult.CODE_ADD_AND_UPDATE, miandan);
-            else if (hasAdd)
-                return new HongBaoAddResult(HongBaoAddResult.CODE_ADD, miandan);
-            else if (hasUpdate)
-                return new HongBaoAddResult(HongBaoAddResult.CODE_UPDATE, miandan);
-            return new HongBaoAddResult(resultCode, miandan);
-        }
-        return new HongBaoAddResult(0, false);
-    }
-
-    private int getOrderState(Set<Integer> states) {
-        if (states.size() == 1)
-            return states.iterator().next();
-        Iterator<Integer> its = states.iterator();
-        while (its.hasNext()) {
-            int tempState = its.next();
-            if (tempState == CommonOrder.STATE_FK)
-                return CommonOrder.STATE_FK;
-            else if (tempState == CommonOrder.STATE_JS)
-                return CommonOrder.STATE_JS;
-        }
-        return CommonOrder.STATE_SX;
-    }
-
-    private List<UserTeamLevel> getBossList(Long uid, int deep) {
-        List<UserTeamLevel> resultList = new ArrayList<>();
-        List<ThreeSale> threeSales = threeSaleSerivce.getMyBossDeepList(uid, deep);
-
-        if (threeSales != null) {
-            List<Long> uidList = new ArrayList<Long>();
-            for (ThreeSale ts : threeSales)
-                uidList.add(ts.getBoss().getId());
-
-            for (Long bossUid : uidList) {
-                UserLevelEnum level = userLevelManager.getUserLevel(bossUid);
-                resultList.add(new UserTeamLevel(bossUid, level));
-            }
-
-        }
-
-        return resultList;
-    }
-
-    private List<UserTeamLevel> getBossList(List<HongBaoV2> children) {
-        List<UserTeamLevel> resultList = new ArrayList<>();
-        for (HongBaoV2 v2 : children) {
-
-            UserLevelEnum level = UserLevelUtil.getByOrderRank(v2.getUrank());
-            if (level == null)
-                level = UserLevelEnum.daRen;
-            UserTeamLevel teamLevel = new UserTeamLevel(v2.getUserInfo().getId(), level);
-
-            if (v2.getType() == HongBaoV2.TYPE_YIJI || v2.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
-                resultList.add(0, teamLevel);
-            } else {
-                resultList.add(teamLevel);
-            }
-        }
-        return resultList;
-    }
-
-    private boolean updateHongBao(HongBaoOrder hongBaoOrder, CommonOrder commonOrder, int type,
-                                  Map<Integer, HongBaoOrder> notificationMap, Date placeOrderTime)
-            throws HongBaoException, UserAccountException {
-        System.out.println(commonOrder.getOrderNo());
-        // 閿佽
-        HongBaoV2 oldHongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoOrder.getHongBaoV2().getId());
-        if (oldHongBao == null)
-            throw new HongBaoException(10, "绾㈠寘瀵硅薄涓嶅瓨鍦�");
-        UserLevelEnum buyerLevel = UserLevelUtil.getByOrderRank(oldHongBao.getUrank());
-        if (buyerLevel == null)
-            throw new HongBaoException(201, "鐢ㄦ埛绛夌骇涓虹┖");
-
-        // 宸茬粡澶辨晥锛屽凡缁忛鍙栵紝鏂拌�佺姸鎬佷竴鑷寸殑绾㈠寘涓嶅仛澶勭悊
-        if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO || oldHongBao.getState() == HongBaoV2.STATE_YILINGQU|| oldHongBao.getState() == HongBaoV2.STATE_LINGQUING)
-            return false;
-
-        if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
-            BigDecimal money = orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, buyerLevel);
-            // 鍏嶅崟澶勭悊
-            boolean mianDan = false;
-            List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(commonOrder.getSourceType(),
-                    commonOrder.getOrderNo());
-            if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
-                BigDecimal payMent = commonOrder.getPayment();
-                if (commonOrder.getState() == CommonOrder.STATE_JS)
-                    payMent = commonOrder.getSettlement();
-
-                if (payMent.compareTo(new BigDecimal(10)) < 0) {
-                    mianDan = userSystemCouponRecordService.isSuccessMianDan(commonOrder.getSourceType(),
-                            commonOrder.getOrderNo());
-                }
-            }
-
-            HongBaoV2 hongBao = createFanLiUpdateHongBao(commonOrder, money, hongBaoOrder.getHongBaoV2().getId(),
-                    mianDan);
-
-            // 鏂拌�佺孩鍖呯姸鎬佷竴鑷翠笖浣i噾閲戦涓嶅彉鍒欎笉澶勭悊
-            if (oldHongBao.getState().intValue() == hongBao.getState()&&oldHongBao.getMoney().compareTo(hongBao.getMoney())==0)
-                return false;
-
-            if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) {
-                if (mianDan) {
-                    try {
-                        userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo(), commonOrder.getSourceType());
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        throw new HongBaoException(12, "鍏嶅崟鍒搁��娆惧嚭閿�");
-                    }
-                }
-            }
-
-            hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
-
-            // 鍔犲叆閫氱煡
-            if (notificationMap.get(type) == null) {
-                HongBaoV2 tempHongBao = new HongBaoV2(oldHongBao.getId());
-                tempHongBao.setUserInfo(oldHongBao.getUserInfo());
-                tempHongBao.setMoney(hongBao.getMoney());
-                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                tempCommonOrder.setPayment(commonOrder.getPayment());
-                tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
-                notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao));
-            } else {
-                // 澧炲姞浠樻閲戦涓庤祫閲�
-                HongBaoOrder tempHongBaoOrder = notificationMap.get(type);
-                tempHongBaoOrder.getCommonOrder()
-                        .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-
-                tempHongBaoOrder.getHongBaoV2()
-                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
-                notificationMap.put(type, tempHongBaoOrder);
-            }
-
-            // 鑾峰彇瀛愮孩鍖�
-            List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
-            if (children != null && children.size() > 0) {
-                List<UserTeamLevel> bossList = getBossList(children);
-
-                for (HongBaoV2 child : children) {
-                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
-                        continue;
-
-                    if (child.getType() == HongBaoV2.TYPE_YIJI) {
-                        money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
-                                bossList);
-                    } else if (child.getType() == HongBaoV2.TYPE_ERJI) {
-                        money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel,
-                                bossList);
-                    }
-
-                    HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(), money, commonOrder);
-                    hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
-
-                    // 鍔犲叆閫氱煡
-                    if (notificationMap.get(child.getType()) == null) {
-                        HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
-                        tempHongBao.setUserInfo(child.getUserInfo());
-                        tempHongBao.setMoney(child.getMoney());
-                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                        tempCommonOrder.setPayment(commonOrder.getPayment());
-                        tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
-                        notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
-                    } else {
-                        // 澧炲姞浠樻閲戦涓庤祫閲�
-                        HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
-                        tempHongBaoOrder.getCommonOrder().setPayment(
-                                tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                        tempHongBaoOrder.getHongBaoV2()
-                                .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
-                        notificationMap.put(child.getType(), tempHongBaoOrder);
-                    }
-                }
-            } else {// 淇涔嬪墠浜岀骇,涓夌骇璁㈠崟鏈粺璁″埌鐨勬儏鍐�
-                if (!mianDan) {
-                    ThreeSale threeSale = threeSaleSerivce.selectByWorkerId(commonOrder.getUserInfo().getId());
-                    if (threeSale != null && threeSale.getSucceedTime() != null
-                            && threeSale.getSucceedTime() <= placeOrderTime.getTime()) {
-                        UserInfo boss = threeSaleSerivce.getBoss(commonOrder.getUserInfo().getId());
-                        if (boss != null) {
-                            boss = userInfoService.selectAvailableByPrimaryKey(boss.getId());
-                        }
-
-                        if (boss != null) {
-                            List<UserTeamLevel> bossList = getBossList(oldHongBao.getUserInfo().getId(), 2);
-
-                            // 鎻掑叆涓�绾у瓙绾㈠寘
-                            money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
-                                    bossList);
-                            UserLevelEnum bossUserLevel = userLevelManager.getUserLevel(boss.getId());
-                            if (money != null) {
-                                HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder,
-                                        HongBaoV2.TYPE_YIJI, money, bossUserLevel);
-                                if (firstHongbao != null)
-                                    addInviteHongBao(firstHongbao, null, notificationMap, commonOrder);
-                            }
-                            boss = threeSaleSerivce.getBoss(boss.getId());
-                            if (boss != null) {
-                                boss = userInfoService.selectAvailableByPrimaryKey(boss.getId());
-                            }
-                            if (boss != null) {
-                                money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder,
-                                        buyerLevel, bossList);
-                                bossUserLevel = userLevelManager.getUserLevel(boss.getId());
-                                if (money != null) {
-                                    HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder,
-                                            HongBaoV2.TYPE_ERJI, money, bossUserLevel);
-                                    if (secondHongbao != null)
-                                        addInviteHongBao(secondHongbao, null, notificationMap, commonOrder);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
-
-            BigDecimal money = orderHongBaoMoneyComputeService.computeShareMoney(commonOrder, buyerLevel);
-
-            HongBaoV2 hongBao = createShareUpdateHongBao(commonOrder, money, oldHongBao.getId());
-            hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
-            // 閫氱煡
-            if (notificationMap.get(type) == null) {
-                HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId());
-                tempHongBao.setUserInfo(hongBaoOrder.getHongBaoV2().getUserInfo());
-                tempHongBao.setMoney(hongBao.getMoney());
-                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                tempCommonOrder.setPayment(commonOrder.getPayment());
-                tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
-                notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao));
-            } else {
-                // 澧炲姞浠樻閲戦涓庤祫閲�
-                HongBaoOrder tempHongBaoOrder = notificationMap.get(type);
-                tempHongBaoOrder.getCommonOrder()
-                        .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                tempHongBaoOrder.getHongBaoV2()
-                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
-                notificationMap.put(type, tempHongBaoOrder);
-            }
-
-            // 鑾峰彇瀛愮孩鍖�
-            List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
-            if (children != null && children.size() > 0) {
-                List<UserTeamLevel> bossList = getBossList(children);
-                for (HongBaoV2 child : children) {
-                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
-                        continue;
-
-                    if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
-                        money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
-                                bossList);
-                    } else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {
-                        money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel,
-                                bossList);
-                    }
-                    HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(), money, commonOrder);
-                    hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
-                    // 娣诲姞閫氱煡
-                    if (notificationMap.get(child.getType()) == null) {
-                        HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
-                        tempHongBao.setUserInfo(child.getUserInfo());
-                        tempHongBao
-                                .setMoney(childUpdate.getMoney() == null ? new BigDecimal(0) : childUpdate.getMoney());
-                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                        tempCommonOrder.setPayment(commonOrder.getPayment());
-                        tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
-                        notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
-                    } else {
-                        // 澧炲姞浠樻閲戦涓庤祫閲�
-                        HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
-                        if (commonOrder.getPayment() != null)
-                            tempHongBaoOrder.getCommonOrder().setPayment(
-                                    tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                        if (childUpdate.getMoney() != null)
-                            tempHongBaoOrder.getHongBaoV2()
-                                    .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(childUpdate.getMoney()));
-                        notificationMap.put(child.getType(), tempHongBaoOrder);
-                    }
-
-                }
-            }
-        } else
-            throw new HongBaoException(2, "type閿欒");
-
-        return true;
-    }
-
-    private HongBaoSaveResult saveHongBao(CommonOrder commonOrder, int type, Map<Integer, HongBaoOrder> notificationMap,
-                                          UserLevelEnum buyerLevel, Date placeOrderDate) throws HongBaoException, UserAccountException {
-        SystemEnum system = userInfoService.getUserSystem(commonOrder.getUserInfo().getId());
-        if (type == HongBaoV2.TYPE_ZIGOU) {
-            // 鏌ヨ鏄惁鏈夊厤鍗曡鍒�
-            BigDecimal mianDanMoney = null;
-            if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_FK) {
-                List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(commonOrder.getSourceType(),
-                        commonOrder.getOrderNo());
-                if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
-                    BigDecimal payMent = commonOrder.getPayment();
-                    if (commonOrder.getState() == CommonOrder.STATE_JS)
-                        payMent = commonOrder.getSettlement();
-                    CommonOrderGoods goods = commonOrderGoodsMapper
-                            .selectByPrimaryKey(commonOrder.getCommonOrderGoods().getId());
-                    if (goods != null) {
-                        try {
-                            if (userSystemCouponService.updateCouponRecordUsed(commonOrder.getUserInfo().getId(),
-                                    commonOrder.getOrderNo(), payMent, Long.parseLong(goods.getGoodsId()), commonOrder.getSourceType()))
-                                mianDanMoney = payMent;
-                        } catch (NumberFormatException e) {
-                            throw new HongBaoException(10, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                            throw new HongBaoException(11, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
-                        }
-                    }
-                }
-            } else if (commonOrder.getState() == CommonOrder.STATE_SX) {// 璁剧疆鍏嶅崟鍒稿け鏁�
-                commonOrder.setPayment(new BigDecimal(0));// 璁㈠崟澶辨晥鍚庣殑浠樻閲戦璁剧疆涓�0
-                try {
-                    userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo(), commonOrder.getSourceType());
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-
-            HongBaoV2 hongBao = createFanLiHongBao(commonOrder,
-                    orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, buyerLevel), mianDanMoney,
-                    buyerLevel);
-            if (hongBao == null)
-                return new HongBaoSaveResult(false, mianDanMoney != null);
-            addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap);
-            UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
-            if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO && mianDanMoney == null) {// 1绾OSS瀛樺湪涓旂孩鍖呮湭澶辨晥,鍏嶅崟涓嶆敮鎸佸绾у垎閿�
-
-                List<UserTeamLevel> bossList = getBossList(hongBao.getUserInfo().getId(), 2);
-
-                BigDecimal money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
-                        bossList);
-                if (money == null)// 杩斿埄璧勯噾涓虹┖涓嶅弬涓庡垎鎴�
-                    return new HongBaoSaveResult(true, mianDanMoney != null);
-
-                UserLevelEnum bossLevel = userLevelManager.getUserLevel(boss.getId());
-
-                HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder, HongBaoV2.TYPE_YIJI,
-                        money, bossLevel);
-
-                addInviteHongBao(firstHongbao, null, notificationMap, commonOrder);
-
-                // 鎻掑叆浜岀骇瀛愮孩鍖�
-                boss = threeSaleSerivce.getBoss(boss.getId());
-                if (boss != null) {// 浜岀骇BOSS瀛樺湪涓旀槸闈炰細鍛樿鍗�
-                    money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel, bossList);
-                    bossLevel = userLevelManager.getUserLevel(boss.getId());
-                    if (money == null)
-                        return new HongBaoSaveResult(true, mianDanMoney != null);
-                    HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder,
-                            HongBaoV2.TYPE_ERJI, money, bossLevel);
-                    addInviteHongBao(secondHongbao, null, notificationMap, commonOrder);
-                }
-            }
-
-        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
-            // 鍒嗕韩璧氫笉鍔犲叆澶辨晥鐨勮鍗�
-            if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
-                return new HongBaoSaveResult(false, false);
-            // 鍒嗕韩璧�
-            BigDecimal money = null;
-            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO
-                    && commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))// 鏉ヨ嚜浜庢窐绀奸噾鐨勫垎浜�
-            {
-                BigDecimal shareRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime(), system);
-                if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ)
-                    money = MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
-                            MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
-                else
-                    money = MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
-                            MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
-            } else
-                money = orderHongBaoMoneyComputeService.computeShareMoney(commonOrder, buyerLevel);
-
-            if (money == null || money.compareTo(new BigDecimal(0)) <= 0)
-                return new HongBaoSaveResult(false, false);
-            HongBaoV2 hongBao = createShareHongBao(commonOrder, money, buyerLevel);
-            if (hongBao == null)
-                return new HongBaoSaveResult(false, false);
-            addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap);
-            // 4鏈�17鏃ュ悗鎵嶆湁涓�绾у垎浜禋
-            if (placeOrderDate.getTime() > TimeUtil.convertToTimeTemp("2019-04-17", "yyyy-MM-dd")) {
-                UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
-                if (boss != null) {
-
-                    List<UserTeamLevel> bossList = getBossList(hongBao.getUserInfo().getId(), 2);
-
-                    money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel, bossList);
-                    if (money == null)
-                        return new HongBaoSaveResult(true, false);
-                    UserLevelEnum bossLevel = userLevelManager.getUserLevel(boss.getId());
-                    HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder,
-                            HongBaoV2.TYPE_SHARE_YIJI, money, bossLevel);
-
-                    addInviteHongBao(firstHongbao, hongBao.getUserInfo().getNickName(), notificationMap, commonOrder);
-
-                    // 浜岀骇鍒嗕韩璧�
-                    boss = threeSaleSerivce.getBoss(boss.getId());
-                    if (boss != null) {
-                        money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel,
-                                bossList);
-                        if (money == null)// 杩斿埄姣斾緥涓�0灏变笉缁熻
-                            return new HongBaoSaveResult(true, false);
-                        bossLevel = userLevelManager.getUserLevel(boss.getId());
-                        HongBaoV2 secondChild = createInviteHongBao(boss.getId(), hongBao, commonOrder,
-                                HongBaoV2.TYPE_SHARE_ERJI, money, bossLevel);
-                        addInviteHongBao(secondChild, null, notificationMap, commonOrder);
-                    }
-                }
-            }
-
-            // 淇敼缁熻鏁版嵁
-            Long goodsId = commonOrder.getCommonOrderGoods().getId();
-            // 鏌ヨ鍟嗗搧
-            CommonOrderGoods goods = commonOrderGoodsMapper.selectByPrimaryKey(goodsId);
-
-            HongBao hb = new HongBao();
-            if (goods != null)
-                hb.setAuctionId(Long.parseLong(goods.getGoodsId()));
-            hb.setUserInfo(hongBao.getUserInfo());
-            hb.setMoney(hongBao.getMoney());
-
-            // TODO 鏇存柊鍒嗕韩璁板綍鏁版嵁
-            // try {
-            // userShareGoodsGroupService.updateOrderRecord(hb,
-            // commonOrder.getSourceType());
-            // } catch (UserShareGoodsRecordException e) {
-            // try {
-            // LogHelper.errorDetailInfo(e);
-            // } catch (Exception e1) {
-            // e1.printStackTrace();
-            // }
-            // }
-        } else
-            throw new HongBaoException(2, "type閿欒");
-
-        return new HongBaoSaveResult(true, false);
-    }
-
-    /**
-     * 娣诲姞閭�璇疯禋绾㈠寘
-     *
-     * @param child
-     * @param notificationMap
-     * @param commonOrder
-     */
-    private void addInviteHongBao(HongBaoV2 child, String parentHongBaoUserName,
-                                  Map<Integer, HongBaoOrder> notificationMap, CommonOrder commonOrder) {
-        if (child != null) {
-            // 鑰佺増鏈祫閲戜负0鐨勭孩鍖呬笉鍔犲叆閭�璇疯鍗�
-            if (child.getMoney() == null || (child.getMoney().compareTo(new BigDecimal(0)) == 0
-                    && commonOrder.getThirdCreateTime().getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME))
-                return;
-
-            hongBaoV2Mapper.insertSelective(child);
-            // 鐢ㄦ埛閫氱煡
-            if (notificationMap.get(child.getType()) == null) {
-                HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
-                tempHongBao.setUserInfo(child.getUserInfo());
-                tempHongBao.setMoney(child.getMoney());
-                if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI)
-                    tempHongBao.setBeizhu(parentHongBaoUserName);
-
-                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                tempCommonOrder.setPayment(commonOrder.getPayment());
-                tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
-                notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
-            } else {
-                // 澧炲姞浠樻閲戦涓庤祫閲�
-                HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
-                tempHongBaoOrder.getCommonOrder()
-                        .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                tempHongBaoOrder.getHongBaoV2()
-                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
-                notificationMap.put(child.getType(), tempHongBaoOrder);
-            }
-        }
-    }
-
-    /**
-     * 鍒涘缓閭�璇风孩鍖�
-     *
-     * @param uid
-     * @param parent
-     * @param commonOrder
-     * @param hongBaoType
-     * @param money
-     * @return
-     */
-    private HongBaoV2 createInviteHongBao(Long uid, HongBaoV2 parent, CommonOrder commonOrder, int hongBaoType,
-                                          BigDecimal money, UserLevelEnum userLevel) {
-        if (parent == null)
-            return null;
-        if (parent.getState() == HongBaoV2.STATE_SHIXIAO)
-            return null;
-        UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid);
-        if (user == null)
-            return null;
-
-        HongBaoV2 child = new HongBaoV2();
-        child.setParent(parent);
-        child.setType(hongBaoType);
-        child.setMoney(money);
-
-        if (commonOrder.getState() == CommonOrder.STATE_FK) {
-            child.setState(HongBaoV2.STATE_BUKELINGQU);
-        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
-            child.setState(HongBaoV2.STATE_KELINGQU);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(commonOrder.getSettleTime());
-            calendar.add(Calendar.MONTH, 1);
-            child.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
-        }
-
-        child.setUserInfo(user);
-        child.setUrank(userLevel.getOrderRank());
-        child.setVersion(2);
-        child.setCreateTime(new Date());
-        child.setOrderType(commonOrder.getSourceType());
-        if (child.getMoney() == null)
-            return null;
-        return child;
-    }
-
-    /**
-     * @param commonOrder
-     * @param money
-     * @param mianDanMoney
-     * @param userLevel
-     * @return
-     * @throws HongBaoException
-     * @throws UserAccountException
-     */
-    private HongBaoV2 createFanLiHongBao(CommonOrder commonOrder, BigDecimal money, BigDecimal mianDanMoney,
-                                         UserLevelEnum userLevel) throws HongBaoException, UserAccountException {
-        HongBaoV2 hongBao = new HongBaoV2();
-        hongBao.setUserInfo(commonOrder.getUserInfo());
-        hongBao.setCreateTime(new Date());
-        hongBao.setType(HongBaoV2.TYPE_ZIGOU);
-        hongBao.setVersion(2);
-        hongBao.setMoney(money);
-        if (commonOrder.getState() == CommonOrder.STATE_FK) {
-            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-
-        } else if (commonOrder.getState() == CommonOrder.STATE_JS || CommonOrder.STATE_WQ == commonOrder.getState()) {
-            hongBao.setState(HongBaoV2.STATE_KELINGQU);
-            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╁崐鍒拌处
-                hongBao.setPreGetTime(new Date(
-                        commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 12L));
-            else
-                hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
-        } else if (commonOrder.getState() == CommonOrder.STATE_SX) {
-            hongBao.setState(HongBaoV2.STATE_SHIXIAO);
-            hongBao.setMoney(new BigDecimal(0));
-        } else {
-            throw new HongBaoException(3, "缁存潈璁㈠崟涓嶈兘鍒涘缓绾㈠寘");
-        }
-
-        if (mianDanMoney != null)
-            hongBao.setMoney(mianDanMoney);
-
-        UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
-        if (user == null)
-            throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
-        hongBao.setUrank(userLevel.getOrderRank());
-        hongBao.setOrderType(commonOrder.getSourceType());
-        return hongBao;
-    }
-
-    private HongBaoV2 createFanLiUpdateHongBao(CommonOrder commonOrder, BigDecimal money, Long hongBaoId,
-                                               boolean mianDan) throws HongBaoException, UserAccountException {
-        HongBaoV2 hongBao = new HongBaoV2(hongBaoId);
-        hongBao.setUpdateTime(new Date());
-        hongBao.setMoney(money);
-        // 鏇存敼鐘舵�佷笌璧勯噾
-        if (commonOrder.getState() == CommonOrder.STATE_FK) {
-            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-
-            if (mianDan)
-                hongBao.setMoney(commonOrder.getPayment());
-        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
-            hongBao.setState(HongBaoV2.STATE_KELINGQU);
-            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╄繃1涓皬鏃跺埌璐�
-                hongBao.setPreGetTime(new Date(
-                        commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 1L));
-            else
-                hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
-            if (mianDan)
-                hongBao.setMoney(commonOrder.getSettlement().compareTo(commonOrder.getPayment()) <= 0
-                        ? commonOrder.getSettlement() : commonOrder.getPayment());// 杩斿埄缁撶畻涓庝粯娆捐緝灏忕殑閲戦
-        } else if (commonOrder.getState() == CommonOrder.STATE_SX) {
-            hongBao.setState(HongBaoV2.STATE_SHIXIAO);
-            hongBao.setMoney(new BigDecimal(0));
-        }
-        return hongBao;
-    }
-
-    /**
-     * 鍒嗕韩璧氭洿鏂�
-     *
-     * @param commonOrder
-     * @param hongBaoId
-     * @return
-     * @throws HongBaoException
-     * @throws UserAccountException
-     */
-    private HongBaoV2 createShareUpdateHongBao(CommonOrder commonOrder, BigDecimal money, Long hongBaoId)
-            throws HongBaoException, UserAccountException {
-        HongBaoV2 hongBao = new HongBaoV2(hongBaoId);
-        hongBao.setUpdateTime(new Date());
-        hongBao.setMoney(money);
-        // 鏇存敼鐘舵�佷笌璧勯噾
-        if (commonOrder.getState() == CommonOrder.STATE_FK) {
-            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
-            hongBao.setState(HongBaoV2.STATE_KELINGQU);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(commonOrder.getSettleTime());
-            calendar.add(Calendar.MONTH, 1);
-            hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
-        } else if (commonOrder.getState() == CommonOrder.STATE_SX) {
-            hongBao.setState(HongBaoV2.STATE_SHIXIAO);
-            hongBao.setMoney(new BigDecimal(0));
-        }
-        return hongBao;
-    }
-
-    private HongBaoV2 createInviteUpdateHongBao(HongBaoV2 oldChild, int mainHongBaoState, BigDecimal money,
-                                                CommonOrder commonOrder) {
-        HongBaoV2 childUpdate = new HongBaoV2(oldChild.getId());
-        childUpdate.setState(mainHongBaoState);
-        childUpdate.setUpdateTime(new Date());
-        childUpdate.setMoney(money);
-        // 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
-        if (mainHongBaoState == HongBaoV2.STATE_KELINGQU) {
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(commonOrder.getSettleTime());
-            calendar.add(Calendar.MONTH, 1);
-            childUpdate.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
-        }
-        return childUpdate;
-    }
-
-    private void addFanLiOrShareHongBao(HongBaoV2 hongBao, CommonOrder commonOrder,
-                                        Map<Integer, HongBaoOrder> notificationMap) {
-        hongBaoV2Mapper.insertSelective(hongBao);
-        // 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠
-        HongBaoOrder hongBaoOrder = new HongBaoOrder();
-        hongBaoOrder.setCommonOrder(commonOrder);
-        hongBaoOrder.setCreateTime(new Date());
-        hongBaoOrder.setHongBaoV2(hongBao);
-        hongBaoOrderMapper.insertSelective(hongBaoOrder);
-        // 鍔犲叆閫氱煡
-        if (notificationMap.get(hongBao.getType()) == null) {
-            HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId());
-            tempHongBao.setUserInfo(hongBao.getUserInfo());
-            tempHongBao.setMoney(hongBao.getMoney());
-            CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-            tempCommonOrder.setPayment(commonOrder.getPayment());
-            tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
-            notificationMap.put(hongBao.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
-        } else {
-            // 澧炲姞浠樻閲戦涓庤祫閲�
-            HongBaoOrder tempHongBaoOrder = notificationMap.get(hongBao.getType());
-            tempHongBaoOrder.getCommonOrder()
-                    .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-            tempHongBaoOrder.getHongBaoV2()
-                    .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
-            notificationMap.put(hongBao.getType(), tempHongBaoOrder);
-        }
-    }
-
-    /**
-     * 鍒涘缓鍒嗕韩璧氱孩鍖�
-     *
-     * @param commonOrder
-     * @param shareRate
-     * @return
-     * @throws HongBaoException
-     * @throws UserAccountException
-     */
-    private HongBaoV2 createShareHongBao(CommonOrder commonOrder, BigDecimal money, UserLevelEnum userLevel)
-            throws HongBaoException, UserAccountException {
-        HongBaoV2 hongBao = new HongBaoV2();
-        hongBao.setCreateTime(new Date());
-        hongBao.setType(HongBaoV2.TYPE_SHARE_GOODS);
-        hongBao.setVersion(2);
-        hongBao.setMoney(money);
-        if (commonOrder.getState() == CommonOrder.STATE_FK) {
-            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
-            hongBao.setState(HongBaoV2.STATE_KELINGQU);
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(commonOrder.getSettleTime());
-            calendar.add(Calendar.MONTH, 1);
-            hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
-        }
-        UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
-        if (user == null)
-            throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
-        hongBao.setUrank(userLevel.getOrderRank());
-        hongBao.setUserInfo(user);
-        hongBao.setOrderType(commonOrder.getSourceType());
-        return hongBao;
-    }
-
-    class HongBaoSaveResult {
-        boolean add;
-        boolean miandan;
-
-        public void setMiandan(boolean miandan) {
-            this.miandan = miandan;
-        }
-
-        public HongBaoSaveResult(boolean add, boolean miandan) {
-            super();
-            this.add = add;
-            this.miandan = miandan;
-        }
-
-        public boolean isAdd() {
-            return add;
-        }
-
-        public void setAdd(boolean add) {
-            this.add = add;
-        }
-
-        public boolean isMiandan() {
-            return miandan;
-        }
-    }
-}
+package com.yeshi.fanli.service.manger.order;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
+
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.util.taobao.TaoBaoUtil;
+import org.springframework.stereotype.Component;
+
+import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
+import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
+import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
+import com.yeshi.fanli.dto.HongBao;
+import com.yeshi.fanli.dto.order.HongBaoAddResult;
+import com.yeshi.fanli.dto.order.UserTeamLevel;
+import com.yeshi.fanli.entity.bus.user.HongBaoV2;
+import com.yeshi.fanli.entity.bus.user.ThreeSale;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
+import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.entity.order.CommonOrderGoods;
+import com.yeshi.fanli.entity.order.HongBaoOrder;
+import com.yeshi.fanli.exception.order.CommonOrderException;
+import com.yeshi.fanli.exception.order.HongBaoException;
+import com.yeshi.fanli.exception.order.InviteOrderSubsidyException;
+import com.yeshi.fanli.exception.user.UserAccountException;
+import com.yeshi.fanli.service.inter.order.CommonOrderService;
+import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
+import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
+import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
+import com.yeshi.fanli.service.manger.user.UserLevelManager;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.TaoBaoConstant;
+import org.yeshi.utils.TimeUtil;
+import com.yeshi.fanli.util.user.UserLevelUtil;
+
+@Component
+public class HongBaoV2AddManager {
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Resource
+    private ThreeSaleSerivce threeSaleSerivce;
+
+    @Resource
+    private HongBaoOrderMapper hongBaoOrderMapper;
+
+    @Resource
+    private HongBaoV2Mapper hongBaoV2Mapper;
+
+    @Resource
+    private UserOrderMsgNotificationService userOrderMsgNotificationService;
+
+    @Resource
+    private HongBaoManageService hongBaoManageService;
+
+    @Resource
+    private CommonOrderService commonOrderService;
+
+    @Resource
+    private UserSystemCouponRecordService userSystemCouponRecordService;
+
+    @Resource
+    private UserSystemCouponService userSystemCouponService;
+
+    @Resource
+    private CommonOrderGoodsMapper commonOrderGoodsMapper;
+
+    @Resource
+    private UserVIPInfoService userVIPInfoService;
+
+    @Resource
+    private UserLevelManager userLevelManager;
+
+    @Resource
+    private InviteOrderSubsidyService inviteOrderSubsidyService;
+
+    @Resource
+    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
+
+    /**
+     * 娣诲姞绾㈠寘淇℃伅
+     *
+     * @param commonOrderList
+     * @param type
+     * @return
+     * @throws HongBaoException
+     * @throws UserAccountException
+     * @throws CommonOrderException
+     * @throws OrderTeamRewardException
+     * @throws InviteOrderSubsidyException
+     */
+    public HongBaoAddResult addHongBao(List<CommonOrder> commonOrderList, int type)
+            throws HongBaoException, UserAccountException {
+
+        if (commonOrderList != null && commonOrderList.size() > 0) {
+            int orderType = commonOrderList.get(0).getSourceType();
+            String orderId = commonOrderList.get(0).getOrderNo();
+
+            Map<Integer, HongBaoOrder> notificationMap = new HashMap<>();
+            int goodsCount = 0;
+            boolean hasAdd = false;
+            boolean hasUpdate = false;
+            Set<Integer> stateSet = new HashSet<>();// 璁㈠崟鐘舵�丼et
+
+            UserLevelEnum userLevel = UserLevelUtil.getByOrderRank(commonOrderList.get(0).getUrank());
+
+            if (userLevel == null)
+                userLevel = UserLevelEnum.daRen;
+
+            Date placeOrderDate = commonOrderList.get(0).getThirdCreateTime();
+
+            boolean miandan = false;
+
+            for (CommonOrder commonOrder : commonOrderList) {
+                stateSet.add(commonOrder.getState());
+                goodsCount += commonOrder.getCount();
+                if (commonOrder == null || commonOrder.getId() == null || commonOrder.getUserInfo() == null)
+                    throw new HongBaoException(1, "璁㈠崟淇℃伅涓嶅畬鏁�");
+                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
+                if (hongBaoOrder == null) {
+                    HongBaoSaveResult result = saveHongBao(commonOrder, type, notificationMap, userLevel,
+                            placeOrderDate);
+                    miandan = result.isMiandan();
+                    hasAdd = result.isAdd();
+                } else {
+                    boolean update = updateHongBao(hongBaoOrder, commonOrder, type, notificationMap, placeOrderDate);
+                    if (update) {
+                        hasUpdate = true;
+                    }
+                }
+            }
+
+            int state = getOrderState(stateSet);
+
+            /**
+             * 閫氱煡鐢ㄦ埛鐨勮繑鍒╂儏鍐�
+             */
+
+            // if (!Constant.IS_TEST) {
+            if (hasAdd) {
+                // 鑾峰彇璁㈠崟琛ヨ创
+
+                Iterator<Integer> its = notificationMap.keySet().iterator();
+                while (its.hasNext()) {
+                    Integer t = its.next();
+                    HongBaoV2 notify = notificationMap.get(t).getHongBaoV2();
+                    CommonOrder commonOrder = notificationMap.get(t).getCommonOrder();
+                    Long uid = notify.getUserInfo().getId();
+
+                    BigDecimal money = notify.getMoney();
+                    switch (t) {
+                        case HongBaoV2.TYPE_ZIGOU:
+                            userOrderMsgNotificationService.orderFanLiStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, goodsCount, state, commonOrder.getThirdCreateTime());
+
+                            break;
+                        case HongBaoV2.TYPE_SHARE_GOODS:
+
+                            userOrderMsgNotificationService.orderShareStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, goodsCount, state, commonOrder.getThirdCreateTime());
+
+                            break;
+                        case HongBaoV2.TYPE_YIJI:
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
+                                    commonOrder.getThirdCreateTime());
+
+                            break;
+                        case HongBaoV2.TYPE_ERJI:
+
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
+                                    commonOrder.getThirdCreateTime());
+
+                            break;
+
+                        case HongBaoV2.TYPE_SHARE_YIJI:
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
+                                    commonOrder.getThirdCreateTime());
+                            break;
+                        case HongBaoV2.TYPE_SHARE_ERJI:
+
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, state,
+                                    commonOrder.getThirdCreateTime());
+
+                            break;
+
+                    }
+                }
+                // }
+            }
+
+            int resultCode = 0;
+            if (hasAdd && hasUpdate)
+                return new HongBaoAddResult(HongBaoAddResult.CODE_ADD_AND_UPDATE, miandan);
+            else if (hasAdd)
+                return new HongBaoAddResult(HongBaoAddResult.CODE_ADD, miandan);
+            else if (hasUpdate)
+                return new HongBaoAddResult(HongBaoAddResult.CODE_UPDATE, miandan);
+            return new HongBaoAddResult(resultCode, miandan);
+        }
+        return new HongBaoAddResult(0, false);
+    }
+
+    private int getOrderState(Set<Integer> states) {
+        if (states.size() == 1)
+            return states.iterator().next();
+        Iterator<Integer> its = states.iterator();
+        while (its.hasNext()) {
+            int tempState = its.next();
+            if (tempState == CommonOrder.STATE_FK)
+                return CommonOrder.STATE_FK;
+            else if (tempState == CommonOrder.STATE_JS)
+                return CommonOrder.STATE_JS;
+        }
+        return CommonOrder.STATE_SX;
+    }
+
+    private List<UserTeamLevel> getBossList(Long uid, int deep) {
+        List<UserTeamLevel> resultList = new ArrayList<>();
+        List<ThreeSale> threeSales = threeSaleSerivce.getMyBossDeepList(uid, deep);
+
+        if (threeSales != null) {
+            List<Long> uidList = new ArrayList<Long>();
+            for (ThreeSale ts : threeSales)
+                uidList.add(ts.getBoss().getId());
+
+            for (Long bossUid : uidList) {
+                UserLevelEnum level = userLevelManager.getUserLevel(bossUid);
+                resultList.add(new UserTeamLevel(bossUid, level));
+            }
+
+        }
+
+        return resultList;
+    }
+
+    private List<UserTeamLevel> getBossList(List<HongBaoV2> children) {
+        List<UserTeamLevel> resultList = new ArrayList<>();
+        for (HongBaoV2 v2 : children) {
+
+            UserLevelEnum level = UserLevelUtil.getByOrderRank(v2.getUrank());
+            if (level == null)
+                level = UserLevelEnum.daRen;
+            UserTeamLevel teamLevel = new UserTeamLevel(v2.getUserInfo().getId(), level);
+
+            if (v2.getType() == HongBaoV2.TYPE_YIJI || v2.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
+                resultList.add(0, teamLevel);
+            } else {
+                resultList.add(teamLevel);
+            }
+        }
+        return resultList;
+    }
+
+    private boolean updateHongBao(HongBaoOrder hongBaoOrder, CommonOrder commonOrder, int type,
+                                  Map<Integer, HongBaoOrder> notificationMap, Date placeOrderTime)
+            throws HongBaoException, UserAccountException {
+        System.out.println(commonOrder.getOrderNo());
+        // 閿佽
+        HongBaoV2 oldHongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoOrder.getHongBaoV2().getId());
+        if (oldHongBao == null)
+            throw new HongBaoException(10, "绾㈠寘瀵硅薄涓嶅瓨鍦�");
+        UserLevelEnum buyerLevel = UserLevelUtil.getByOrderRank(oldHongBao.getUrank());
+        if (buyerLevel == null)
+            throw new HongBaoException(201, "鐢ㄦ埛绛夌骇涓虹┖");
+
+        // 宸茬粡澶辨晥锛屽凡缁忛鍙栵紝鏂拌�佺姸鎬佷竴鑷寸殑绾㈠寘涓嶅仛澶勭悊
+        if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO || oldHongBao.getState() == HongBaoV2.STATE_YILINGQU|| oldHongBao.getState() == HongBaoV2.STATE_LINGQUING)
+            return false;
+
+        if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
+            BigDecimal money = orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, buyerLevel);
+            // 鍏嶅崟澶勭悊
+            boolean mianDan = false;
+            List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(commonOrder.getSourceType(),
+                    commonOrder.getOrderNo());
+            if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
+                BigDecimal payMent = commonOrder.getPayment();
+                if (commonOrder.getState() == CommonOrder.STATE_JS)
+                    payMent = commonOrder.getSettlement();
+
+                if (payMent.compareTo(new BigDecimal(10)) < 0) {
+                    mianDan = userSystemCouponRecordService.isSuccessMianDan(commonOrder.getSourceType(),
+                            commonOrder.getOrderNo());
+                }
+            }
+
+            HongBaoV2 hongBao = createFanLiUpdateHongBao(commonOrder, money, hongBaoOrder.getHongBaoV2().getId(),
+                    mianDan);
+
+            // 鏂拌�佺孩鍖呯姸鎬佷竴鑷翠笖浣i噾閲戦涓嶅彉鍒欎笉澶勭悊
+            if (oldHongBao.getState().intValue() == hongBao.getState()&&oldHongBao.getMoney().compareTo(hongBao.getMoney())==0)
+                return false;
+
+            if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) {
+                if (mianDan) {
+                    try {
+                        userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo(), commonOrder.getSourceType());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        throw new HongBaoException(12, "鍏嶅崟鍒搁��娆惧嚭閿�");
+                    }
+                }
+            }
+
+            hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
+
+            // 鍔犲叆閫氱煡
+            if (notificationMap.get(type) == null) {
+                HongBaoV2 tempHongBao = new HongBaoV2(oldHongBao.getId());
+                tempHongBao.setUserInfo(oldHongBao.getUserInfo());
+                tempHongBao.setMoney(hongBao.getMoney());
+                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                tempCommonOrder.setPayment(commonOrder.getPayment());
+                tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
+                notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao));
+            } else {
+                // 澧炲姞浠樻閲戦涓庤祫閲�
+                HongBaoOrder tempHongBaoOrder = notificationMap.get(type);
+                tempHongBaoOrder.getCommonOrder()
+                        .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+
+                tempHongBaoOrder.getHongBaoV2()
+                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
+                notificationMap.put(type, tempHongBaoOrder);
+            }
+
+            // 鑾峰彇瀛愮孩鍖�
+            List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
+            if (children != null && children.size() > 0) {
+                List<UserTeamLevel> bossList = getBossList(children);
+
+                for (HongBaoV2 child : children) {
+                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
+                        continue;
+
+                    if (child.getType() == HongBaoV2.TYPE_YIJI) {
+                        money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
+                                bossList);
+                    } else if (child.getType() == HongBaoV2.TYPE_ERJI) {
+                        money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel,
+                                bossList);
+                    }
+
+                    HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(), money, commonOrder);
+                    hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
+
+                    // 鍔犲叆閫氱煡
+                    if (notificationMap.get(child.getType()) == null) {
+                        HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
+                        tempHongBao.setUserInfo(child.getUserInfo());
+                        tempHongBao.setMoney(child.getMoney());
+                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                        tempCommonOrder.setPayment(commonOrder.getPayment());
+                        tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
+                        notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+                    } else {
+                        // 澧炲姞浠樻閲戦涓庤祫閲�
+                        HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
+                        tempHongBaoOrder.getCommonOrder().setPayment(
+                                tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                        tempHongBaoOrder.getHongBaoV2()
+                                .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
+                        notificationMap.put(child.getType(), tempHongBaoOrder);
+                    }
+                }
+            } else {// 淇涔嬪墠浜岀骇,涓夌骇璁㈠崟鏈粺璁″埌鐨勬儏鍐�
+                if (!mianDan) {
+                    ThreeSale threeSale = threeSaleSerivce.selectByWorkerId(commonOrder.getUserInfo().getId());
+                    if (threeSale != null && threeSale.getSucceedTime() != null
+                            && threeSale.getSucceedTime() <= placeOrderTime.getTime()) {
+                        UserInfo boss = threeSaleSerivce.getBoss(commonOrder.getUserInfo().getId());
+                        if (boss != null) {
+                            boss = userInfoService.selectAvailableByPrimaryKey(boss.getId());
+                        }
+
+                        if (boss != null) {
+                            List<UserTeamLevel> bossList = getBossList(oldHongBao.getUserInfo().getId(), 2);
+
+                            // 鎻掑叆涓�绾у瓙绾㈠寘
+                            money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
+                                    bossList);
+                            UserLevelEnum bossUserLevel = userLevelManager.getUserLevel(boss.getId());
+                            if (money != null) {
+                                HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder,
+                                        HongBaoV2.TYPE_YIJI, money, bossUserLevel);
+                                if (firstHongbao != null)
+                                    addInviteHongBao(firstHongbao, null, notificationMap, commonOrder);
+                            }
+                            boss = threeSaleSerivce.getBoss(boss.getId());
+                            if (boss != null) {
+                                boss = userInfoService.selectAvailableByPrimaryKey(boss.getId());
+                            }
+                            if (boss != null) {
+                                money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder,
+                                        buyerLevel, bossList);
+                                bossUserLevel = userLevelManager.getUserLevel(boss.getId());
+                                if (money != null) {
+                                    HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder,
+                                            HongBaoV2.TYPE_ERJI, money, bossUserLevel);
+                                    if (secondHongbao != null)
+                                        addInviteHongBao(secondHongbao, null, notificationMap, commonOrder);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
+
+            BigDecimal money = orderHongBaoMoneyComputeService.computeShareMoney(commonOrder, buyerLevel);
+
+            HongBaoV2 hongBao = createShareUpdateHongBao(commonOrder, money, oldHongBao.getId());
+            hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
+            // 閫氱煡
+            if (notificationMap.get(type) == null) {
+                HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId());
+                tempHongBao.setUserInfo(hongBaoOrder.getHongBaoV2().getUserInfo());
+                tempHongBao.setMoney(hongBao.getMoney());
+                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                tempCommonOrder.setPayment(commonOrder.getPayment());
+                tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
+                notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao));
+            } else {
+                // 澧炲姞浠樻閲戦涓庤祫閲�
+                HongBaoOrder tempHongBaoOrder = notificationMap.get(type);
+                tempHongBaoOrder.getCommonOrder()
+                        .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                tempHongBaoOrder.getHongBaoV2()
+                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
+                notificationMap.put(type, tempHongBaoOrder);
+            }
+
+            // 鑾峰彇瀛愮孩鍖�
+            List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
+            if (children != null && children.size() > 0) {
+                List<UserTeamLevel> bossList = getBossList(children);
+                for (HongBaoV2 child : children) {
+                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
+                        continue;
+
+                    if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
+                        money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
+                                bossList);
+                    } else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {
+                        money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel,
+                                bossList);
+                    }
+                    HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(), money, commonOrder);
+                    hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
+                    // 娣诲姞閫氱煡
+                    if (notificationMap.get(child.getType()) == null) {
+                        HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
+                        tempHongBao.setUserInfo(child.getUserInfo());
+                        tempHongBao
+                                .setMoney(childUpdate.getMoney() == null ? new BigDecimal(0) : childUpdate.getMoney());
+                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                        tempCommonOrder.setPayment(commonOrder.getPayment());
+                        tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
+                        notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+                    } else {
+                        // 澧炲姞浠樻閲戦涓庤祫閲�
+                        HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
+                        if (commonOrder.getPayment() != null)
+                            tempHongBaoOrder.getCommonOrder().setPayment(
+                                    tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                        if (childUpdate.getMoney() != null)
+                            tempHongBaoOrder.getHongBaoV2()
+                                    .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(childUpdate.getMoney()));
+                        notificationMap.put(child.getType(), tempHongBaoOrder);
+                    }
+
+                }
+            }
+        } else
+            throw new HongBaoException(2, "type閿欒");
+
+        return true;
+    }
+
+    private HongBaoSaveResult saveHongBao(CommonOrder commonOrder, int type, Map<Integer, HongBaoOrder> notificationMap,
+                                          UserLevelEnum buyerLevel, Date placeOrderDate) throws HongBaoException, UserAccountException {
+        SystemEnum system = userInfoService.getUserSystem(commonOrder.getUserInfo().getId());
+        if (type == HongBaoV2.TYPE_ZIGOU) {
+            // 鏌ヨ鏄惁鏈夊厤鍗曡鍒�
+            BigDecimal mianDanMoney = null;
+            if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_FK) {
+                List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(commonOrder.getSourceType(),
+                        commonOrder.getOrderNo());
+                if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
+                    BigDecimal payMent = commonOrder.getPayment();
+                    if (commonOrder.getState() == CommonOrder.STATE_JS)
+                        payMent = commonOrder.getSettlement();
+                    CommonOrderGoods goods = commonOrderGoodsMapper
+                            .selectByPrimaryKey(commonOrder.getCommonOrderGoods().getId());
+                    if (goods != null) {
+                        try {
+                            if (userSystemCouponService.updateCouponRecordUsed(commonOrder.getUserInfo().getId(),
+                                    commonOrder.getOrderNo(), payMent, goods.getGoodsId(), commonOrder.getSourceType()))
+                                mianDanMoney = payMent;
+                        } catch (NumberFormatException e) {
+                            throw new HongBaoException(10, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            throw new HongBaoException(11, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
+                        }
+                    }
+                }
+            } else if (commonOrder.getState() == CommonOrder.STATE_SX) {// 璁剧疆鍏嶅崟鍒稿け鏁�
+                commonOrder.setPayment(new BigDecimal(0));// 璁㈠崟澶辨晥鍚庣殑浠樻閲戦璁剧疆涓�0
+                try {
+                    userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo(), commonOrder.getSourceType());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+
+            HongBaoV2 hongBao = createFanLiHongBao(commonOrder,
+                    orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, buyerLevel), mianDanMoney,
+                    buyerLevel);
+            if (hongBao == null)
+                return new HongBaoSaveResult(false, mianDanMoney != null);
+            addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap);
+            UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
+            if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO && mianDanMoney == null) {// 1绾OSS瀛樺湪涓旂孩鍖呮湭澶辨晥,鍏嶅崟涓嶆敮鎸佸绾у垎閿�
+
+                List<UserTeamLevel> bossList = getBossList(hongBao.getUserInfo().getId(), 2);
+
+                BigDecimal money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel,
+                        bossList);
+                if (money == null)// 杩斿埄璧勯噾涓虹┖涓嶅弬涓庡垎鎴�
+                    return new HongBaoSaveResult(true, mianDanMoney != null);
+
+                UserLevelEnum bossLevel = userLevelManager.getUserLevel(boss.getId());
+
+                HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder, HongBaoV2.TYPE_YIJI,
+                        money, bossLevel);
+
+                addInviteHongBao(firstHongbao, null, notificationMap, commonOrder);
+
+                // 鎻掑叆浜岀骇瀛愮孩鍖�
+                boss = threeSaleSerivce.getBoss(boss.getId());
+                if (boss != null) {// 浜岀骇BOSS瀛樺湪涓旀槸闈炰細鍛樿鍗�
+                    money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel, bossList);
+                    bossLevel = userLevelManager.getUserLevel(boss.getId());
+                    if (money == null)
+                        return new HongBaoSaveResult(true, mianDanMoney != null);
+                    HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder,
+                            HongBaoV2.TYPE_ERJI, money, bossLevel);
+                    addInviteHongBao(secondHongbao, null, notificationMap, commonOrder);
+                }
+            }
+
+        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
+            // 鍒嗕韩璧氫笉鍔犲叆澶辨晥鐨勮鍗�
+            if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
+                return new HongBaoSaveResult(false, false);
+            // 鍒嗕韩璧�
+            BigDecimal money = null;
+            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO
+                    && commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))// 鏉ヨ嚜浜庢窐绀奸噾鐨勫垎浜�
+            {
+                BigDecimal shareRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime(), system);
+                if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ)
+                    money = MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
+                            MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
+                else
+                    money = MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
+                            MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
+            } else
+                money = orderHongBaoMoneyComputeService.computeShareMoney(commonOrder, buyerLevel);
+
+            if (money == null || money.compareTo(new BigDecimal(0)) <= 0)
+                return new HongBaoSaveResult(false, false);
+            HongBaoV2 hongBao = createShareHongBao(commonOrder, money, buyerLevel);
+            if (hongBao == null)
+                return new HongBaoSaveResult(false, false);
+            addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap);
+            // 4鏈�17鏃ュ悗鎵嶆湁涓�绾у垎浜禋
+            if (placeOrderDate.getTime() > TimeUtil.convertToTimeTemp("2019-04-17", "yyyy-MM-dd")) {
+                UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
+                if (boss != null) {
+
+                    List<UserTeamLevel> bossList = getBossList(hongBao.getUserInfo().getId(), 2);
+
+                    money = orderHongBaoMoneyComputeService.computeFirstInviteMoney(commonOrder, buyerLevel, bossList);
+                    if (money == null)
+                        return new HongBaoSaveResult(true, false);
+                    UserLevelEnum bossLevel = userLevelManager.getUserLevel(boss.getId());
+                    HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder,
+                            HongBaoV2.TYPE_SHARE_YIJI, money, bossLevel);
+
+                    addInviteHongBao(firstHongbao, hongBao.getUserInfo().getNickName(), notificationMap, commonOrder);
+
+                    // 浜岀骇鍒嗕韩璧�
+                    boss = threeSaleSerivce.getBoss(boss.getId());
+                    if (boss != null) {
+                        money = orderHongBaoMoneyComputeService.computeSecondInviteMoney(commonOrder, buyerLevel,
+                                bossList);
+                        if (money == null)// 杩斿埄姣斾緥涓�0灏变笉缁熻
+                            return new HongBaoSaveResult(true, false);
+                        bossLevel = userLevelManager.getUserLevel(boss.getId());
+                        HongBaoV2 secondChild = createInviteHongBao(boss.getId(), hongBao, commonOrder,
+                                HongBaoV2.TYPE_SHARE_ERJI, money, bossLevel);
+                        addInviteHongBao(secondChild, null, notificationMap, commonOrder);
+                    }
+                }
+            }
+
+            // 淇敼缁熻鏁版嵁
+            Long goodsId = commonOrder.getCommonOrderGoods().getId();
+            // 鏌ヨ鍟嗗搧
+            CommonOrderGoods goods = commonOrderGoodsMapper.selectByPrimaryKey(goodsId);
+
+            HongBao hb = new HongBao();
+            if (goods != null)
+                hb.setAuctionId(TaoBaoUtil.getAuctionId(goods.getGoodsId()));
+            hb.setUserInfo(hongBao.getUserInfo());
+            hb.setMoney(hongBao.getMoney());
+
+            // TODO 鏇存柊鍒嗕韩璁板綍鏁版嵁
+            // try {
+            // userShareGoodsGroupService.updateOrderRecord(hb,
+            // commonOrder.getSourceType());
+            // } catch (UserShareGoodsRecordException e) {
+            // try {
+            // LogHelper.errorDetailInfo(e);
+            // } catch (Exception e1) {
+            // e1.printStackTrace();
+            // }
+            // }
+        } else
+            throw new HongBaoException(2, "type閿欒");
+
+        return new HongBaoSaveResult(true, false);
+    }
+
+    /**
+     * 娣诲姞閭�璇疯禋绾㈠寘
+     *
+     * @param child
+     * @param notificationMap
+     * @param commonOrder
+     */
+    private void addInviteHongBao(HongBaoV2 child, String parentHongBaoUserName,
+                                  Map<Integer, HongBaoOrder> notificationMap, CommonOrder commonOrder) {
+        if (child != null) {
+            // 鑰佺増鏈祫閲戜负0鐨勭孩鍖呬笉鍔犲叆閭�璇疯鍗�
+            if (child.getMoney() == null || (child.getMoney().compareTo(new BigDecimal(0)) == 0
+                    && commonOrder.getThirdCreateTime().getTime() < Constant.NEW_ORDER_FANLI_RULE_TIME))
+                return;
+
+            hongBaoV2Mapper.insertSelective(child);
+            // 鐢ㄦ埛閫氱煡
+            if (notificationMap.get(child.getType()) == null) {
+                HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
+                tempHongBao.setUserInfo(child.getUserInfo());
+                tempHongBao.setMoney(child.getMoney());
+                if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI)
+                    tempHongBao.setBeizhu(parentHongBaoUserName);
+
+                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                tempCommonOrder.setPayment(commonOrder.getPayment());
+                tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
+                notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+            } else {
+                // 澧炲姞浠樻閲戦涓庤祫閲�
+                HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
+                tempHongBaoOrder.getCommonOrder()
+                        .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                tempHongBaoOrder.getHongBaoV2()
+                        .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
+                notificationMap.put(child.getType(), tempHongBaoOrder);
+            }
+        }
+    }
+
+    /**
+     * 鍒涘缓閭�璇风孩鍖�
+     *
+     * @param uid
+     * @param parent
+     * @param commonOrder
+     * @param hongBaoType
+     * @param money
+     * @return
+     */
+    private HongBaoV2 createInviteHongBao(Long uid, HongBaoV2 parent, CommonOrder commonOrder, int hongBaoType,
+                                          BigDecimal money, UserLevelEnum userLevel) {
+        if (parent == null)
+            return null;
+        if (parent.getState() == HongBaoV2.STATE_SHIXIAO)
+            return null;
+        UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid);
+        if (user == null)
+            return null;
+
+        HongBaoV2 child = new HongBaoV2();
+        child.setParent(parent);
+        child.setType(hongBaoType);
+        child.setMoney(money);
+
+        if (commonOrder.getState() == CommonOrder.STATE_FK) {
+            child.setState(HongBaoV2.STATE_BUKELINGQU);
+        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+            child.setState(HongBaoV2.STATE_KELINGQU);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(commonOrder.getSettleTime());
+            calendar.add(Calendar.MONTH, 1);
+            child.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+        }
+
+        child.setUserInfo(user);
+        child.setUrank(userLevel.getOrderRank());
+        child.setVersion(2);
+        child.setCreateTime(new Date());
+        child.setOrderType(commonOrder.getSourceType());
+        if (child.getMoney() == null)
+            return null;
+        return child;
+    }
+
+    /**
+     * @param commonOrder
+     * @param money
+     * @param mianDanMoney
+     * @param userLevel
+     * @return
+     * @throws HongBaoException
+     * @throws UserAccountException
+     */
+    private HongBaoV2 createFanLiHongBao(CommonOrder commonOrder, BigDecimal money, BigDecimal mianDanMoney,
+                                         UserLevelEnum userLevel) throws HongBaoException, UserAccountException {
+        HongBaoV2 hongBao = new HongBaoV2();
+        hongBao.setUserInfo(commonOrder.getUserInfo());
+        hongBao.setCreateTime(new Date());
+        hongBao.setType(HongBaoV2.TYPE_ZIGOU);
+        hongBao.setVersion(2);
+        hongBao.setMoney(money);
+        if (commonOrder.getState() == CommonOrder.STATE_FK) {
+            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+
+        } else if (commonOrder.getState() == CommonOrder.STATE_JS || CommonOrder.STATE_WQ == commonOrder.getState()) {
+            hongBao.setState(HongBaoV2.STATE_KELINGQU);
+            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╁崐鍒拌处
+                hongBao.setPreGetTime(new Date(
+                        commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 12L));
+            else
+                hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
+        } else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+            hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+            hongBao.setMoney(new BigDecimal(0));
+        } else {
+            throw new HongBaoException(HongBaoException.CODE_ORDER_WEIQUAN, "缁存潈璁㈠崟涓嶈兘鍒涘缓绾㈠寘");
+        }
+
+        if (mianDanMoney != null)
+            hongBao.setMoney(mianDanMoney);
+
+        UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+        if (user == null)
+            throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
+        hongBao.setUrank(userLevel.getOrderRank());
+        hongBao.setOrderType(commonOrder.getSourceType());
+        return hongBao;
+    }
+
+    private HongBaoV2 createFanLiUpdateHongBao(CommonOrder commonOrder, BigDecimal money, Long hongBaoId,
+                                               boolean mianDan) throws HongBaoException, UserAccountException {
+        HongBaoV2 hongBao = new HongBaoV2(hongBaoId);
+        hongBao.setUpdateTime(new Date());
+        hongBao.setMoney(money);
+        // 鏇存敼鐘舵�佷笌璧勯噾
+        if (commonOrder.getState() == CommonOrder.STATE_FK) {
+            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+
+            if (mianDan)
+                hongBao.setMoney(commonOrder.getPayment());
+        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+            hongBao.setState(HongBaoV2.STATE_KELINGQU);
+            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╄繃1涓皬鏃跺埌璐�
+                hongBao.setPreGetTime(new Date(
+                        commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 1L));
+            else
+                hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
+            if (mianDan)
+                hongBao.setMoney(commonOrder.getSettlement().compareTo(commonOrder.getPayment()) <= 0
+                        ? commonOrder.getSettlement() : commonOrder.getPayment());// 杩斿埄缁撶畻涓庝粯娆捐緝灏忕殑閲戦
+        } else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+            hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+            hongBao.setMoney(new BigDecimal(0));
+        }
+        return hongBao;
+    }
+
+    /**
+     * 鍒嗕韩璧氭洿鏂�
+     *
+     * @param commonOrder
+     * @param hongBaoId
+     * @return
+     * @throws HongBaoException
+     * @throws UserAccountException
+     */
+    private HongBaoV2 createShareUpdateHongBao(CommonOrder commonOrder, BigDecimal money, Long hongBaoId)
+            throws HongBaoException, UserAccountException {
+        HongBaoV2 hongBao = new HongBaoV2(hongBaoId);
+        hongBao.setUpdateTime(new Date());
+        hongBao.setMoney(money);
+        // 鏇存敼鐘舵�佷笌璧勯噾
+        if (commonOrder.getState() == CommonOrder.STATE_FK) {
+            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+            hongBao.setState(HongBaoV2.STATE_KELINGQU);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(commonOrder.getSettleTime());
+            calendar.add(Calendar.MONTH, 1);
+            hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+        } else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+            hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+            hongBao.setMoney(new BigDecimal(0));
+        }
+        return hongBao;
+    }
+
+    private HongBaoV2 createInviteUpdateHongBao(HongBaoV2 oldChild, int mainHongBaoState, BigDecimal money,
+                                                CommonOrder commonOrder) {
+        HongBaoV2 childUpdate = new HongBaoV2(oldChild.getId());
+        childUpdate.setState(mainHongBaoState);
+        childUpdate.setUpdateTime(new Date());
+        childUpdate.setMoney(money);
+        // 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
+        if (mainHongBaoState == HongBaoV2.STATE_KELINGQU) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(commonOrder.getSettleTime());
+            calendar.add(Calendar.MONTH, 1);
+            childUpdate.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+        }
+        return childUpdate;
+    }
+
+    private void addFanLiOrShareHongBao(HongBaoV2 hongBao, CommonOrder commonOrder,
+                                        Map<Integer, HongBaoOrder> notificationMap) {
+        hongBaoV2Mapper.insertSelective(hongBao);
+        // 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠
+        HongBaoOrder hongBaoOrder = new HongBaoOrder();
+        hongBaoOrder.setCommonOrder(commonOrder);
+        hongBaoOrder.setCreateTime(new Date());
+        hongBaoOrder.setHongBaoV2(hongBao);
+        hongBaoOrderMapper.insertSelective(hongBaoOrder);
+        // 鍔犲叆閫氱煡
+        if (notificationMap.get(hongBao.getType()) == null) {
+            HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId());
+            tempHongBao.setUserInfo(hongBao.getUserInfo());
+            tempHongBao.setMoney(hongBao.getMoney());
+            CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+            tempCommonOrder.setPayment(commonOrder.getPayment());
+            tempCommonOrder.setThirdCreateTime(commonOrder.getThirdCreateTime());
+            notificationMap.put(hongBao.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+        } else {
+            // 澧炲姞浠樻閲戦涓庤祫閲�
+            HongBaoOrder tempHongBaoOrder = notificationMap.get(hongBao.getType());
+            tempHongBaoOrder.getCommonOrder()
+                    .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+            tempHongBaoOrder.getHongBaoV2()
+                    .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
+            notificationMap.put(hongBao.getType(), tempHongBaoOrder);
+        }
+    }
+
+    /**
+     * 鍒涘缓鍒嗕韩璧氱孩鍖�
+     *
+     * @param commonOrder
+     * @param shareRate
+     * @return
+     * @throws HongBaoException
+     * @throws UserAccountException
+     */
+    private HongBaoV2 createShareHongBao(CommonOrder commonOrder, BigDecimal money, UserLevelEnum userLevel)
+            throws HongBaoException, UserAccountException {
+        HongBaoV2 hongBao = new HongBaoV2();
+        hongBao.setCreateTime(new Date());
+        hongBao.setType(HongBaoV2.TYPE_SHARE_GOODS);
+        hongBao.setVersion(2);
+        hongBao.setMoney(money);
+        if (commonOrder.getState() == CommonOrder.STATE_FK) {
+            hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+        } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+            hongBao.setState(HongBaoV2.STATE_KELINGQU);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(commonOrder.getSettleTime());
+            calendar.add(Calendar.MONTH, 1);
+            hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+        }
+        UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+        if (user == null)
+            throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
+        hongBao.setUrank(userLevel.getOrderRank());
+        hongBao.setUserInfo(user);
+        hongBao.setOrderType(commonOrder.getSourceType());
+        return hongBao;
+    }
+
+    class HongBaoSaveResult {
+        boolean add;
+        boolean miandan;
+
+        public void setMiandan(boolean miandan) {
+            this.miandan = miandan;
+        }
+
+        public HongBaoSaveResult(boolean add, boolean miandan) {
+            super();
+            this.add = add;
+            this.miandan = miandan;
+        }
+
+        public boolean isAdd() {
+            return add;
+        }
+
+        public void setAdd(boolean add) {
+            this.add = add;
+        }
+
+        public boolean isMiandan() {
+            return miandan;
+        }
+    }
+}

--
Gitblit v1.8.0