From d1f26741bddf6f512d62c0100d42c52be8d37e76 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期六, 06 二月 2021 15:35:40 +0800
Subject: [PATCH] 工具类优化

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java | 2352 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 1,176 insertions(+), 1,176 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java
index a8ee6c4..3f70534 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java
@@ -1,1176 +1,1176 @@
-package com.yeshi.fanli.service.impl.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.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-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.dao.mybatis.taobao.TaoBaoOrderMapper;
-import com.yeshi.fanli.dto.HongBao;
-import com.yeshi.fanli.dto.HongBaoDTO;
-import com.yeshi.fanli.dto.order.HongBaoAddResult;
-import com.yeshi.fanli.entity.bus.user.HongBaoV2;
-import com.yeshi.fanli.entity.bus.user.ThreeSale;
-import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
-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.entity.order.ShareGoodsActivityOrder;
-import com.yeshi.fanli.entity.system.ConfigKeyEnum;
-import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
-import com.yeshi.fanli.exception.order.HongBaoException;
-import com.yeshi.fanli.exception.order.ShareGoodsActivityOrderException;
-import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
-import com.yeshi.fanli.exception.user.UserAccountException;
-import com.yeshi.fanli.log.LogHelper;
-import com.yeshi.fanli.service.inter.config.ConfigService;
-import com.yeshi.fanli.service.inter.order.CommonOrderService;
-import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
-import com.yeshi.fanli.service.inter.order.ShareGoodsActivityOrderService;
-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.UserShareGoodsGroupService;
-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.tb.UserExtraTaoBaoInfoService;
-import com.yeshi.fanli.util.Constant;
-import org.yeshi.utils.MoneyBigDecimalUtil;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.TaoBaoConstant;
-import org.yeshi.utils.TimeUtil;
-
-@Service
-public class HongBaoV2ServiceImpl implements HongBaoV2Service {
-
-    @Resource
-    private HongBaoV2Mapper hongBaoV2Mapper;
-
-    @Resource
-    private TaoBaoOrderMapper taoBaoOrderMapper;
-
-    @Resource
-    private CommonOrderGoodsMapper commonOrderGoodsMapper;
-
-    @Resource
-    private HongBaoOrderMapper hongBaoOrderMapper;
-
-    @Resource
-    private CommonOrderService commonOrderService;
-
-    @Resource
-    private UserInfoService userInfoService;
-
-    @Resource
-    private UserShareGoodsGroupService userShareGoodsGroupService;
-
-    @Resource
-    private HongBaoManageService hongBaoManageService;
-
-    @Resource
-    private ThreeSaleSerivce threeSaleSerivce;
-
-    @Resource
-    private UserOrderMsgNotificationService userOrderMsgNotificationService;
-
-    @Resource
-    private ConfigService configService;
-
-    @Resource
-    private ShareGoodsActivityOrderService shareGoodsActivityOrderService;
-
-    @Resource
-    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
-
-    @Lazy
-    @Resource
-    private UserSystemCouponService userSystemCouponService;
-
-    @Resource
-    private UserSystemCouponRecordService userSystemCouponRecordService;
-
-    @Override
-    public int insert(HongBaoV2 record) {
-        return hongBaoV2Mapper.insert(record);
-    }
-
-    @Override
-    public int insertSelective(HongBaoV2 record) {
-        return hongBaoV2Mapper.insertSelective(record);
-    }
-
-    @Override
-    public int updateByPrimaryKeySelective(HongBaoV2 record) {
-        return hongBaoV2Mapper.updateByPrimaryKeySelective(record);
-    }
-
-    @Override
-    public int updateByPrimaryKey(HongBaoV2 record) {
-        return hongBaoV2Mapper.updateByPrimaryKey(record);
-    }
-
-    @Override
-    public int deleteByPrimaryKey(Long id) {
-        return hongBaoV2Mapper.deleteByPrimaryKey(id);
-    }
-
-    @Override
-    public HongBaoV2 selectByPrimaryKey(Long id) {
-        return hongBaoV2Mapper.selectByPrimaryKey(id);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public HongBaoAddResult addHongBao(List<CommonOrder> commonOrderList, int type)
-            throws HongBaoException, UserAccountException {
-        Set<Integer> stateSet = new HashSet<>();// 璁㈠崟鐘舵�丼et
-        if (commonOrderList != null && commonOrderList.size() > 0) {
-            int orderType = commonOrderList.get(0).getSourceType();
-
-            boolean miandan = false;
-            Map<Integer, HongBaoOrder> notificationMap = new HashMap<>();
-            int goodsCount = 0;
-            boolean hasAdd = false;
-            boolean hasUpdate = 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) {
-                    miandan = saveHongBao(commonOrder, type, notificationMap);
-                    hasAdd = true;
-                } else {
-                    boolean update = updateHongBao(hongBaoOrder, commonOrder, type, notificationMap);
-                    if (update)
-                        hasUpdate = true;
-                }
-            }
-
-            /**
-             * 閫氱煡鐢ㄦ埛鐨勮繑鍒╂儏鍐�
-             */
-            int state = getOrderState(stateSet);
-            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();
-                    String orderId = commonOrderList.get(0).getOrderNo();
-                    Long uid = notify.getUserInfo().getId();
-                    BigDecimal money = notify.getMoney();
-                    switch (t) {
-                        case HongBaoV2.TYPE_ZIGOU:
-                            userOrderMsgNotificationService.orderFanLiStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, goodsCount, commonOrder.getState(),
-                                    commonOrder.getThirdCreateTime());
-
-                            break;
-                        case HongBaoV2.TYPE_SHARE_GOODS:
-
-                            userOrderMsgNotificationService.orderShareStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, goodsCount, commonOrder.getState(),
-                                    commonOrder.getThirdCreateTime());
-
-                            break;
-                        case HongBaoV2.TYPE_YIJI:
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
-                                    commonOrder.getThirdCreateTime());
-                            break;
-                        case HongBaoV2.TYPE_ERJI:
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
-                                    commonOrder.getThirdCreateTime());
-                            break;
-
-                        case HongBaoV2.TYPE_SHARE_YIJI:
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
-                                    commonOrder.getThirdCreateTime());
-
-                        case HongBaoV2.TYPE_SHARE_ERJI:
-                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
-                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
-                                    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 boolean updateHongBao(HongBaoOrder hongBaoOrder, CommonOrder commonOrder, int type,
-                                  Map<Integer, HongBaoOrder> notificationMap) throws HongBaoException, UserAccountException {
-        System.out.println(commonOrder.getOrderNo());
-        // 閿佽
-        HongBaoV2 oldHongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoOrder.getHongBaoV2().getId());
-        if (oldHongBao == null)
-            throw new HongBaoException(10, "绾㈠寘瀵硅薄涓嶅瓨鍦�");
-        // 宸茬粡澶辨晥锛屽凡缁忛鍙栵紝棰嗗彇涓紝鏂拌�佺姸鎬佷竴鑷寸殑绾㈠寘涓嶅仛澶勭悊
-        if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO || oldHongBao.getState() == HongBaoV2.STATE_YILINGQU|| oldHongBao.getState() == HongBaoV2.STATE_LINGQUING)
-            return false;
-
-        SystemEnum system = userInfoService.getUserSystem(commonOrder.getUserInfo().getId());
-
-        if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
-            BigDecimal fanliRate = hongBaoManageService.getFanLiRate(UserLevelEnum.daRen,
-                    commonOrder.getCreateTime().getTime(), system);
-            // 鍏嶅崟澶勭悊
-            boolean mianDan = false;
-            List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
-                    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 = new HongBaoV2(hongBaoOrder.getHongBaoV2().getId());
-            hongBao.setUpdateTime(new Date());
-            // 鏇存敼鐘舵�佷笌璧勯噾
-            if (commonOrder.getState() == CommonOrder.STATE_FK) {
-                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
-                if (mianDan)
-                    hongBao.setMoney(commonOrder.getPayment());
-            } else if (commonOrder.getState() == CommonOrder.STATE_JS
-                    || commonOrder.getState() == CommonOrder.STATE_WQ) {
-                hongBao.setState(HongBaoV2.STATE_KELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
-                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));
-            }
-
-            // 鏂拌�佺孩鍖呯姸鎬佷竴鑷翠笉澶勭悊
-            if (oldHongBao.getState().intValue() == hongBao.getState())
-                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());
-                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)
-                for (HongBaoV2 child : children) {
-                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
-                        continue;
-
-                    HongBaoV2 childUpdate = new HongBaoV2(child.getId());
-                    childUpdate.setState(hongBao.getState());
-                    childUpdate.setUpdateTime(new Date());
-                    BigDecimal rate = null;
-                    if (child.getType() == HongBaoV2.TYPE_YIJI) {// 涓�绾у垎浜禋
-                        rate = hongBaoManageService.getFirstInviteRate(child.getUrank(),
-                                commonOrder.getCreateTime().getTime(), system);
-                    } else if (child.getType() == HongBaoV2.TYPE_ERJI) {// 浜岀骇鍒嗕韩璧�
-                        rate = hongBaoManageService.getSecondInviteRate(child.getUrank(),
-                                commonOrder.getCreateTime().getTime(), system);
-                    }
-
-                    // 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
-                    if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
-                        childUpdate.setMoney(
-                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
-                        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")));
-                    } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
-                        childUpdate.setMoney(
-                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
-                    }
-                    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());
-                        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() <= commonOrder.getThirdCreateTime().getTime()) {
-                        UserInfo boss = threeSaleSerivce.getBoss(commonOrder.getUserInfo().getId());
-                        // 鎻掑叆涓�绾у瓙绾㈠寘
-                        BigDecimal firstRate = hongBaoManageService
-                                .getFirstInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
-                        if (firstRate.compareTo(new BigDecimal(0)) <= 0)
-                            return true;
-                        HongBaoV2 firstHongbao = new HongBaoV2();
-                        firstHongbao.setUserInfo(boss);
-                        firstHongbao.setUrank(boss.getRank());
-                        firstHongbao.setParent(hongBao);
-                        firstHongbao.setCreateTime(new Date());
-                        firstHongbao.setType(HongBaoV2.TYPE_YIJI);
-                        firstHongbao.setVersion(2);
-                        firstHongbao.setState(hongBao.getState());
-                        firstHongbao.setOrderType(commonOrder.getSourceType());
-
-                        if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
-                            firstHongbao.setMoney(
-                                    MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
-                            Calendar calendar = Calendar.getInstance();
-                            calendar.setTime(commonOrder.getSettleTime());
-                            calendar.add(Calendar.MONTH, 1);
-                            firstHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
-                                    "yyyy-M-dd")));
-                        } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
-                            firstHongbao.setMoney(
-                                    MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
-                        } else if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) {
-                            firstHongbao.setMoney(new BigDecimal(0));
-                        }
-
-                        if (firstHongbao.getMoney() != null
-                                && firstHongbao.getMoney().compareTo(new BigDecimal(0)) > 0) {
-                            hongBaoV2Mapper.insertSelective(firstHongbao);
-                            // 鐢ㄦ埛閫氱煡
-                            if (notificationMap.get(HongBaoV2.TYPE_YIJI) == null) {
-                                HongBaoV2 tempHongBao = new HongBaoV2(firstHongbao.getId());
-                                tempHongBao.setUserInfo(firstHongbao.getUserInfo());
-                                tempHongBao.setMoney(firstHongbao.getMoney());
-                                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                                tempCommonOrder.setPayment(commonOrder.getPayment());
-                                notificationMap.put(HongBaoV2.TYPE_YIJI,
-                                        new HongBaoOrder(tempCommonOrder, tempHongBao));
-                            } else {
-                                // 澧炲姞浠樻閲戦涓庤祫閲�
-                                HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_YIJI);
-                                tempHongBaoOrder.getCommonOrder().setPayment(
-                                        tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                                tempHongBaoOrder.getHongBaoV2().setMoney(
-                                        tempHongBaoOrder.getHongBaoV2().getMoney().add(firstHongbao.getMoney()));
-                                notificationMap.put(HongBaoV2.TYPE_YIJI, tempHongBaoOrder);
-                            }
-                        }
-
-                        // 鎻掑叆浜岀骇瀛愮孩鍖�
-                        boss = threeSaleSerivce.getBoss(boss.getId());
-                        if (boss != null) {// 浜岀骇BOSS瀛樺湪
-                            BigDecimal secondRate = hongBaoManageService
-                                    .getSecondInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
-                            if (secondRate.compareTo(new BigDecimal(0)) <= 0)
-                                return true;
-                            HongBaoV2 secondHongbao = new HongBaoV2();
-                            secondHongbao.setUserInfo(boss);
-                            secondHongbao.setUrank(boss.getRank());
-                            secondHongbao.setParent(hongBao);
-                            secondHongbao.setCreateTime(new Date());
-                            secondHongbao.setType(HongBaoV2.TYPE_ERJI);
-                            secondHongbao.setVersion(2);
-                            secondHongbao.setState(hongBao.getState());
-                            secondHongbao.setOrderType(commonOrder.getSourceType());
-                            if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
-                                secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
-                                        secondRate.divide(new BigDecimal(100))));
-                                Calendar calendar = Calendar.getInstance();
-                                calendar.setTime(commonOrder.getSettleTime());
-                                calendar.add(Calendar.MONTH, 1);
-                                secondHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                                        calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
-                                        "yyyy-M-dd")));
-                            } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
-                                secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
-                                        secondRate.divide(new BigDecimal(100))));
-                            } else if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
-                                secondHongbao.setMoney(new BigDecimal(0));
-                            if (secondHongbao.getMoney() != null
-                                    && secondHongbao.getMoney().compareTo(new BigDecimal(0)) > 0) {
-                                hongBaoV2Mapper.insertSelective(secondHongbao);
-                                // 鐢ㄦ埛閫氱煡
-                                if (notificationMap.get(HongBaoV2.TYPE_ERJI) == null) {
-                                    HongBaoV2 tempHongBao = new HongBaoV2(secondHongbao.getId());
-                                    tempHongBao.setUserInfo(secondHongbao.getUserInfo());
-                                    tempHongBao.setMoney(secondHongbao.getMoney());
-                                    CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                                    tempCommonOrder.setPayment(commonOrder.getPayment());
-                                    notificationMap.put(HongBaoV2.TYPE_ERJI,
-                                            new HongBaoOrder(tempCommonOrder, tempHongBao));
-                                } else {
-                                    // 澧炲姞浠樻閲戦涓庤祫閲�
-                                    HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_ERJI);
-                                    tempHongBaoOrder.getCommonOrder().setPayment(tempHongBaoOrder.getCommonOrder()
-                                            .getPayment().add(commonOrder.getPayment()));
-                                    tempHongBaoOrder.getHongBaoV2().setMoney(
-                                            tempHongBaoOrder.getHongBaoV2().getMoney().add(secondHongbao.getMoney()));
-                                    notificationMap.put(HongBaoV2.TYPE_ERJI, tempHongBaoOrder);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
-            BigDecimal fanliRate = null;
-            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO
-                    && commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))
-                fanliRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime(), system);
-            else
-                fanliRate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,
-                        commonOrder.getCreateTime().getTime(), system);
-
-            List<ShareGoodsActivityOrder> list = shareGoodsActivityOrderService
-                    .listByOrderIdAndUid(commonOrder.getUserInfo().getId(), commonOrder.getOrderNo());
-            if (list != null && list.size() > 0) {
-                fanliRate = list.get(0).getShareRate();
-            }
-
-            HongBaoV2 hongBao = new HongBaoV2(hongBaoOrder.getHongBaoV2().getId());
-            hongBao.setUpdateTime(new Date());
-            // 鏇存敼鐘舵�佷笌璧勯噾
-            if (commonOrder.getState() == CommonOrder.STATE_FK) {
-                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
-            } else if (commonOrder.getState() == CommonOrder.STATE_JS
-                    || commonOrder.getState() == CommonOrder.STATE_WQ) {
-                hongBao.setState(HongBaoV2.STATE_KELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
-                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));
-            }
-            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());
-                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)
-                for (HongBaoV2 child : children) {
-                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
-                        continue;
-
-                    HongBaoV2 childUpdate = new HongBaoV2(child.getId());
-                    // 缁熶竴璁剧疆鐘舵��
-                    childUpdate.setState(hongBao.getState());
-                    childUpdate.setUpdateTime(new Date());
-                    BigDecimal rate = null;
-                    if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 涓�绾у垎浜禋
-                        rate = hongBaoManageService.getFirstShareRate(1, commonOrder.getCreateTime().getTime(), system);
-                    } else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 浜岀骇鍒嗕韩璧�
-                        rate = hongBaoManageService.getSecondShareRate(1, commonOrder.getCreateTime().getTime(), system);
-                    }
-
-                    // 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
-                    if (CommonOrder.STATE_JS == commonOrder.getState()
-                            || CommonOrder.STATE_WQ == commonOrder.getState()) {
-                        childUpdate.setMoney(
-                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
-                        if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
-                                "yyyy-MM-dd"))
-                            childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
-                                    rate.divide(new BigDecimal(100))));
-
-                        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")));
-                    } else if (CommonOrder.STATE_FK == commonOrder.getState()) {
-                        if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
-                                "yyyy-MM-dd"))
-                            childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
-                                    rate.divide(new BigDecimal(100))));
-                        else
-                            childUpdate.setMoney(
-                                    MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
-                    }
-                    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());
-                        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 boolean saveHongBao(CommonOrder commonOrder, int type, Map<Integer, HongBaoOrder> notificationMap)
-            throws HongBaoException, UserAccountException {
-        SystemEnum system = userInfoService.getUserSystem(commonOrder.getUserInfo().getId());
-        if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
-            BigDecimal fanliRate = hongBaoManageService.getFanLiRate(UserLevelEnum.daRen,
-                    commonOrder.getCreateTime().getTime(), system);
-            // 鏌ヨ鏄惁鏈夊厤鍗曡鍒�
-            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 = new HongBaoV2();
-            hongBao.setUserInfo(commonOrder.getUserInfo());
-            hongBao.setCreateTime(new Date());
-            hongBao.setType(HongBaoV2.TYPE_ZIGOU);
-            hongBao.setVersion(2);
-            if (commonOrder.getState() == CommonOrder.STATE_FK) {
-                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
-            } else if (commonOrder.getState() == CommonOrder.STATE_JS
-                    || CommonOrder.STATE_WQ == commonOrder.getState()) {
-                hongBao.setState(HongBaoV2.STATE_KELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
-                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(user.getRank());
-            hongBao.setOrderType(commonOrder.getSourceType());
-            hongBaoV2Mapper.insertSelective(hongBao);
-            // 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠
-            HongBaoOrder hongBaoOrder = new HongBaoOrder();
-            hongBaoOrder.setCommonOrder(commonOrder);
-            hongBaoOrder.setCreateTime(new Date());
-            hongBaoOrder.setHongBaoV2(hongBao);
-            hongBaoOrderMapper.insertSelective(hongBaoOrder);
-            // 鍔犲叆閫氱煡
-            if (notificationMap.get(type) == 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());
-                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);
-            }
-
-            UserInfo boss = threeSaleSerivce.getBoss(user.getId());
-            if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO && mianDanMoney == null) {// 1绾OSS瀛樺湪涓旂孩鍖呮湭澶辨晥,鍏嶅崟涓嶆敮鎸佸绾у垎閿�
-
-                // 鎻掑叆涓�绾у瓙绾㈠寘
-                BigDecimal firstRate = hongBaoManageService
-                        .getFirstInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
-                if (firstRate.compareTo(new BigDecimal(0)) <= 0)
-                    return mianDanMoney != null;
-                HongBaoV2 firstHongbao = new HongBaoV2();
-                firstHongbao.setUserInfo(boss);
-                firstHongbao.setUrank(boss.getRank());
-                firstHongbao.setParent(hongBao);
-                firstHongbao.setCreateTime(new Date());
-                firstHongbao.setType(HongBaoV2.TYPE_YIJI);
-                firstHongbao.setVersion(2);
-                firstHongbao.setState(hongBao.getState());
-                firstHongbao.setOrderType(commonOrder.getSourceType());
-
-                if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
-                    firstHongbao.setMoney(
-                            MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
-                    Calendar calendar = Calendar.getInstance();
-                    calendar.setTime(commonOrder.getSettleTime());
-                    calendar.add(Calendar.MONTH, 1);
-                    firstHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                            calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
-                            "yyyy-M-dd")));
-                } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
-                    firstHongbao.setMoney(
-                            MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
-                }
-                // 杩斿埄涓�0鐨勪笉閫氱煡
-                if (firstHongbao.getMoney() == null || firstHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
-                    return mianDanMoney != null;
-
-                hongBaoV2Mapper.insertSelective(firstHongbao);
-                // 鐢ㄦ埛閫氱煡
-                if (notificationMap.get(HongBaoV2.TYPE_YIJI) == null) {
-                    HongBaoV2 tempHongBao = new HongBaoV2(firstHongbao.getId());
-                    tempHongBao.setUserInfo(firstHongbao.getUserInfo());
-                    tempHongBao.setMoney(firstHongbao.getMoney());
-                    CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                    tempCommonOrder.setPayment(commonOrder.getPayment());
-                    notificationMap.put(HongBaoV2.TYPE_YIJI, new HongBaoOrder(tempCommonOrder, tempHongBao));
-                } else {
-                    // 澧炲姞浠樻閲戦涓庤祫閲�
-                    HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_YIJI);
-                    tempHongBaoOrder.getCommonOrder()
-                            .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                    tempHongBaoOrder.getHongBaoV2()
-                            .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(firstHongbao.getMoney()));
-                    notificationMap.put(HongBaoV2.TYPE_YIJI, tempHongBaoOrder);
-                }
-
-                // 鎻掑叆浜岀骇瀛愮孩鍖�
-                boss = threeSaleSerivce.getBoss(boss.getId());
-                if (boss != null) {// 浜岀骇BOSS瀛樺湪
-                    BigDecimal secondRate = hongBaoManageService
-                            .getSecondInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
-                    if (secondRate.compareTo(new BigDecimal(0)) <= 0)
-                        return mianDanMoney != null;
-                    HongBaoV2 secondHongbao = new HongBaoV2();
-                    secondHongbao.setUserInfo(boss);
-                    secondHongbao.setUrank(boss.getRank());
-                    secondHongbao.setParent(hongBao);
-                    secondHongbao.setCreateTime(new Date());
-                    secondHongbao.setType(HongBaoV2.TYPE_ERJI);
-                    secondHongbao.setVersion(2);
-                    secondHongbao.setState(hongBao.getState());
-                    secondHongbao.setOrderType(commonOrder.getSourceType());
-                    if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
-                        secondHongbao.setMoney(
-                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100))));
-                        Calendar calendar = Calendar.getInstance();
-                        calendar.setTime(commonOrder.getSettleTime());
-                        calendar.add(Calendar.MONTH, 1);
-                        secondHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
-                                calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
-                                "yyyy-M-dd")));
-                    } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
-                        secondHongbao.setMoney(
-                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100))));
-                    }
-
-                    // 杩斿埄涓�0鐨勪笉缁熻
-                    if (secondHongbao.getMoney() == null || secondHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
-                        return mianDanMoney != null;
-
-                    hongBaoV2Mapper.insertSelective(secondHongbao);
-
-                    // 鐢ㄦ埛閫氱煡
-                    if (notificationMap.get(HongBaoV2.TYPE_ERJI) == null) {
-                        HongBaoV2 tempHongBao = new HongBaoV2(secondHongbao.getId());
-                        tempHongBao.setUserInfo(secondHongbao.getUserInfo());
-                        tempHongBao.setMoney(secondHongbao.getMoney());
-                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                        tempCommonOrder.setPayment(commonOrder.getPayment());
-                        notificationMap.put(HongBaoV2.TYPE_ERJI, new HongBaoOrder(tempCommonOrder, tempHongBao));
-                    } else {
-                        // 澧炲姞浠樻閲戦涓庤祫閲�
-                        HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_ERJI);
-                        tempHongBaoOrder.getCommonOrder().setPayment(
-                                tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                        tempHongBaoOrder.getHongBaoV2()
-                                .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(secondHongbao.getMoney()));
-                        notificationMap.put(HongBaoV2.TYPE_ERJI, tempHongBaoOrder);
-                    }
-                }
-
-            }
-            return mianDanMoney != null;
-        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
-            // 鍒嗕韩璧氫笉鍔犲叆澶辨晥鐨勮鍗�
-            if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
-                return false;
-            // 鍒嗕韩璧�
-            BigDecimal shareRate = null;
-            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO
-                    && commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))// 鏉ヨ嚜浜庢窐绀奸噾鐨勫垎浜�
-                shareRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime(), system);
-            else
-                shareRate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,
-                        commonOrder.getCreateTime().getTime(), system);
-
-            UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
-
-            // 鍒ゆ柇璁㈠崟鍒嗕韩娲诲姩鏄惁寮�鍚�
-            if ("1".equalsIgnoreCase(configService.getValue(ConfigKeyEnum.shareGoodsActivityOpen.getKey(), user.getSystem()))) {
-                // 娌℃湁璁㈠崟锛屽苟涓旀槸娓犻亾ID鏉ョ殑锛屽苟涓�
-                UserExtraTaoBaoInfo taoBaoExtraInfo = userExtraTaoBaoInfoService
-                        .getByUid(commonOrder.getUserInfo().getId());
-                if (taoBaoExtraInfo != null && ((!StringUtil.isNullOrEmpty(taoBaoExtraInfo.getTaoBaoOrderEnd6Num())
-                        && !commonOrder.getOrderNo().endsWith(taoBaoExtraInfo.getTaoBaoOrderEnd6Num().trim()))
-                        || StringUtil.isNullOrEmpty(taoBaoExtraInfo.getTaoBaoOrderEnd6Num()))) {
-                    List<TaoBaoOrder> taoBaoOrderList = taoBaoOrderMapper
-                            .selectTaoBaoOrderByOrderId(commonOrder.getOrderNo());
-                    if (taoBaoOrderList != null && taoBaoOrderList.size() > 0
-                            && !StringUtil.isNullOrEmpty(taoBaoOrderList.get(0).getRelationId())) {
-                        if (shareGoodsActivityOrderService.listByUid(commonOrder.getUserInfo().getId()).size() < 1) {
-                            shareRate = new BigDecimal(hongBaoManageService.get("share_activity_proportion", system));
-                            try {
-                                shareGoodsActivityOrderService.addShareGoodsActivityOrder(
-                                        commonOrder.getUserInfo().getId(), shareRate, commonOrder.getOrderNo());
-                            } catch (ShareGoodsActivityOrderException e) {
-                                try {
-                                    LogHelper.errorDetailInfo(e);
-                                } catch (Exception e1) {
-                                    e1.printStackTrace();
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            HongBaoV2 hongBao = new HongBaoV2();
-            hongBao.setCreateTime(new Date());
-            hongBao.setType(HongBaoV2.TYPE_SHARE_GOODS);
-            hongBao.setVersion(2);
-            if (commonOrder.getState() == CommonOrder.STATE_FK) {
-                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), shareRate.divide(new BigDecimal(100))));
-            } else if (commonOrder.getState() == CommonOrder.STATE_JS
-                    || commonOrder.getState() == CommonOrder.STATE_WQ) {
-                hongBao.setState(HongBaoV2.STATE_KELINGQU);
-                hongBao.setMoney(
-                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), shareRate.divide(new BigDecimal(100))));
-                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")));
-            }
-
-            if (user == null)
-                throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
-            hongBao.setUrank(user.getRank());
-            hongBao.setUserInfo(user);
-            hongBao.setOrderType(commonOrder.getSourceType());
-            hongBaoV2Mapper.insertSelective(hongBao);
-            // 鎻掑叆绾㈠寘涓庤鍗曟槧灏�
-            HongBaoOrder hongBaoOrder = new HongBaoOrder();
-            hongBaoOrder.setCommonOrder(commonOrder);
-            hongBaoOrder.setCreateTime(new Date());
-            hongBaoOrder.setHongBaoV2(hongBao);
-            hongBaoOrderMapper.insertSelective(hongBaoOrder);
-
-            if (notificationMap.get(type) == 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());
-                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);
-            }
-
-            // 4鏈�17鏃ュ悗鎵嶆湁涓�绾у垎浜禋
-            if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-17", "yyyy-MM-dd")) {
-                UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
-                if (boss != null) {
-                    BigDecimal firstLevelRate = hongBaoManageService.getFirstShareRate(1,
-                            commonOrder.getThirdCreateTime().getTime(), system);
-                    HongBaoV2 child = new HongBaoV2();
-                    child.setParent(hongBao);
-                    child.setType(HongBaoV2.TYPE_SHARE_YIJI);
-                    if (commonOrder.getState() == CommonOrder.STATE_FK) {
-                        child.setState(HongBaoV2.STATE_BUKELINGQU);
-                        child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
-                                firstLevelRate.divide(new BigDecimal(100))));
-                    } else if (commonOrder.getState() == CommonOrder.STATE_JS
-                            || commonOrder.getState() == CommonOrder.STATE_WQ) {
-                        child.setState(HongBaoV2.STATE_KELINGQU);
-                        child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
-                                firstLevelRate.divide(new BigDecimal(100))));
-                        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(boss);
-                    child.setUrank(boss.getRank());
-                    child.setVersion(2);
-                    child.setCreateTime(new Date());
-                    child.setOrderType(commonOrder.getSourceType());
-                    if (child.getMoney() != null && child.getMoney().compareTo(new BigDecimal(0)) > 0) {
-                        hongBaoV2Mapper.insertSelective(child);
-                        // 娣诲姞閫氱煡
-                        if (notificationMap.get(HongBaoV2.TYPE_SHARE_YIJI) == null) {
-                            HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
-                            tempHongBao.setUserInfo(child.getUserInfo());
-                            tempHongBao.setMoney(child.getMoney());
-                            tempHongBao.setBeizhu(hongBao.getUserInfo().getNickName());
-                            CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
-                            tempCommonOrder.setPayment(commonOrder.getPayment());
-                            notificationMap.put(HongBaoV2.TYPE_SHARE_YIJI,
-                                    new HongBaoOrder(tempCommonOrder, tempHongBao));
-                        } else {
-                            // 澧炲姞浠樻閲戦涓庤祫閲�
-                            HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_SHARE_YIJI);
-                            tempHongBaoOrder.getCommonOrder().setPayment(
-                                    tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
-                            tempHongBaoOrder.getHongBaoV2()
-                                    .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
-                            notificationMap.put(HongBaoV2.TYPE_SHARE_YIJI, tempHongBaoOrder);
-                        }
-                    }
-                }
-            }
-
-            // 淇敼缁熻鏁版嵁
-            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());
-
-            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 false;
-    }
-
-    @Override
-    public List<HongBaoDTO> listJiangJinByUid(Long uid, int page, int pageSize) {
-        return hongBaoV2Mapper.listJiangJinByUid(uid, (page - 1) * pageSize, pageSize);
-    }
-
-    @Override
-    public long countJiangJinByUid(Long uid) {
-        Long count = hongBaoV2Mapper.countJiangJinByUid(uid);
-        return count == null ? 0 : count;
-    }
-
-    @Override
-    public BigDecimal getTotalTiChengMoney(Long uid) {
-
-        return hongBaoV2Mapper.getTotalTiChengMoney(uid);
-    }
-
-    @Override
-    public int getTotalTiChengCount(Long uid) {
-        return hongBaoV2Mapper.getTotalTiChengCount(uid);
-    }
-
-    @Override
-    public BigDecimal getUnGetTiChengMoney(Long uid) {
-        return hongBaoV2Mapper.getUnGetTiChengMoney(uid);
-    }
-
-    @Override
-    public BigDecimal getTotalFanLiMoney(Long uid) {
-        BigDecimal money = hongBaoV2Mapper.getTotalFanLiMoney(uid);
-        return money == null ? new BigDecimal(0) : money;
-    }
-
-    @Override
-    public BigDecimal getUnRecievedFanLiMoney(Long uid) {
-        BigDecimal money = hongBaoV2Mapper.getUnRecievedFanLiMoney(uid);
-        return money == null ? new BigDecimal(0) : money;
-    }
-
-    @Override
-    public BigDecimal getUnRecievedMoneyWithCreateTime(Long uid, Date minDate, Date maxDate) {
-        BigDecimal money = hongBaoV2Mapper.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate);
-        if (money == null)
-            return new BigDecimal(0);
-        else
-            return money;
-    }
-
-    @Override
-    public BigDecimal getUnRecievedMoneyWithPreGetTime(Long uid, Date minDate, Date maxDate) {
-        BigDecimal money = hongBaoV2Mapper.getUnRecievedMoneyWithPreGetTime(uid, minDate, maxDate);
-        if (money == null)
-            return new BigDecimal(0);
-        else
-            return money;
-    }
-
-    @Override
-    public BigDecimal computeMoneyByUidAndState(Long uid, int state) {
-        List<Integer> stateList = new ArrayList<>();
-        stateList.add(state);
-        BigDecimal money = hongBaoV2Mapper.computeMoneyByUidAndState(uid, stateList);
-        if (money == null)
-            return new BigDecimal(0);
-        else
-            return money;
-    }
-
-    @Override
-    public List<HongBaoV2> listChildrenById(Long id) {
-        return hongBaoV2Mapper.listChildrenById(id);
-    }
-
-    @Override
-    public List<HongBaoV2> listChildrenByIds(List<Long> idList) {
-        if (idList == null || idList.size() == 0)
-            return null;
-        return hongBaoV2Mapper.listChildrenByIds(idList);
-    }
-
-    @Override
-    public List<Long> getUidByNear30DayShareSucceed() {
-        return hongBaoV2Mapper.getUidByNear30DayShareSucceed();
-    }
-
-    @Override
-    public void invalidInviteHongBaoByParentUid(Long parentUid, String beiZhu) {
-        List<Integer> typeList = new ArrayList<>();
-        typeList.add(HongBaoV2.TYPE_YIJI);
-        typeList.add(HongBaoV2.TYPE_ERJI);
-        typeList.add(HongBaoV2.TYPE_SHARE_YIJI);
-        typeList.add(HongBaoV2.TYPE_SHARE_ERJI);
-        List<Integer> stateList = new ArrayList<>();
-        stateList.add(HongBaoV2.STATE_KELINGQU);
-        stateList.add(HongBaoV2.STATE_BUKELINGQU);
-        long count = hongBaoV2Mapper.countByParentUidAndTypeAndState(parentUid, typeList, stateList);
-        int page = (int) (count % 100 == 0 ? count / 100 : count / 100 + 1);
-        for (int i = 1; i <= page; i++) {
-            List<HongBaoV2> list = hongBaoV2Mapper.listByParentUidAndTypeAndState(parentUid, typeList, stateList, 0,
-                    100);
-            if (list != null)
-                for (HongBaoV2 v2 : list) {
-                    HongBaoV2 update = new HongBaoV2(v2.getId());
-                    update.setUpdateTime(new Date());
-                    update.setState(HongBaoV2.STATE_SHIXIAO);
-                    update.setBeizhu(beiZhu);
-                    hongBaoV2Mapper.updateByPrimaryKeySelective(update);
-                }
-        }
-    }
-
-    @Override
-    public List<HongBaoV2> listBySourceTypeAndTradeIdListAndUid(int sourceType, long uid, List<String> tradeIdList) {
-        if (tradeIdList == null || tradeIdList.size() == 0)
-            return null;
-        return hongBaoV2Mapper.listBySourceTypeAndTradeIdListAndUid(sourceType, uid, tradeIdList);
-    }
-
-    @Override
-    public HongBaoV2 getFirstValidHongBaoByTypeAndUid(List<Integer> typeList, Long uid) {
-        List<Integer> stateList = new ArrayList<>();
-        stateList.add(HongBaoV2.STATE_BUKELINGQU);
-        stateList.add(HongBaoV2.STATE_KELINGQU);
-        stateList.add(HongBaoV2.STATE_LINGQUING);
-        stateList.add(HongBaoV2.STATE_YILINGQU);
-        List<HongBaoV2> hongBaoV2List = hongBaoV2Mapper.listByStateAndTypeAndUid(stateList, typeList, uid, 0, 1);
-        if (hongBaoV2List != null && hongBaoV2List.size() > 0)
-            return hongBaoV2List.get(0);
-        return null;
-    }
-
-    @Override
-    public List<HongBaoV2> listByIds(List<Long> idList) {
-        return hongBaoV2Mapper.listByIds(idList);
-    }
-
-    @Override
-    public List<HongBaoDTO> listByOrderTradeId(String tradeId) {
-        return hongBaoV2Mapper.listByOrderTradeId(tradeId);
-    }
-
-    @Override
-    public Integer getDirectBossUrankByPid(Long pid) {
-        return hongBaoV2Mapper.getDirectBossUrankByPid(pid);
-    }
-
-    @Transactional
-    @Override
-    public void setHongBaoRecieved(Long uid, List<Integer> typeList, Date preGetTime) {
-        hongBaoV2Mapper.setHongBaoRecieved(uid, typeList, preGetTime);
-    }
-
-
-}
+package com.yeshi.fanli.service.impl.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.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+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.dao.mybatis.taobao.TaoBaoOrderMapper;
+import com.yeshi.fanli.dto.HongBao;
+import com.yeshi.fanli.dto.HongBaoDTO;
+import com.yeshi.fanli.dto.order.HongBaoAddResult;
+import com.yeshi.fanli.entity.bus.user.HongBaoV2;
+import com.yeshi.fanli.entity.bus.user.ThreeSale;
+import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
+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.entity.order.ShareGoodsActivityOrder;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
+import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
+import com.yeshi.fanli.exception.order.HongBaoException;
+import com.yeshi.fanli.exception.order.ShareGoodsActivityOrderException;
+import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
+import com.yeshi.fanli.exception.user.UserAccountException;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.order.CommonOrderService;
+import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
+import com.yeshi.fanli.service.inter.order.ShareGoodsActivityOrderService;
+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.UserShareGoodsGroupService;
+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.tb.UserExtraTaoBaoInfoService;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.TaoBaoConstant;
+import org.yeshi.utils.TimeUtil;
+
+@Service
+public class HongBaoV2ServiceImpl implements HongBaoV2Service {
+
+    @Resource
+    private HongBaoV2Mapper hongBaoV2Mapper;
+
+    @Resource
+    private TaoBaoOrderMapper taoBaoOrderMapper;
+
+    @Resource
+    private CommonOrderGoodsMapper commonOrderGoodsMapper;
+
+    @Resource
+    private HongBaoOrderMapper hongBaoOrderMapper;
+
+    @Resource
+    private CommonOrderService commonOrderService;
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Resource
+    private UserShareGoodsGroupService userShareGoodsGroupService;
+
+    @Resource
+    private HongBaoManageService hongBaoManageService;
+
+    @Resource
+    private ThreeSaleSerivce threeSaleSerivce;
+
+    @Resource
+    private UserOrderMsgNotificationService userOrderMsgNotificationService;
+
+    @Resource
+    private ConfigService configService;
+
+    @Resource
+    private ShareGoodsActivityOrderService shareGoodsActivityOrderService;
+
+    @Resource
+    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
+
+    @Lazy
+    @Resource
+    private UserSystemCouponService userSystemCouponService;
+
+    @Resource
+    private UserSystemCouponRecordService userSystemCouponRecordService;
+
+    @Override
+    public int insert(HongBaoV2 record) {
+        return hongBaoV2Mapper.insert(record);
+    }
+
+    @Override
+    public int insertSelective(HongBaoV2 record) {
+        return hongBaoV2Mapper.insertSelective(record);
+    }
+
+    @Override
+    public int updateByPrimaryKeySelective(HongBaoV2 record) {
+        return hongBaoV2Mapper.updateByPrimaryKeySelective(record);
+    }
+
+    @Override
+    public int updateByPrimaryKey(HongBaoV2 record) {
+        return hongBaoV2Mapper.updateByPrimaryKey(record);
+    }
+
+    @Override
+    public int deleteByPrimaryKey(Long id) {
+        return hongBaoV2Mapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public HongBaoV2 selectByPrimaryKey(Long id) {
+        return hongBaoV2Mapper.selectByPrimaryKey(id);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public HongBaoAddResult addHongBao(List<CommonOrder> commonOrderList, int type)
+            throws HongBaoException, UserAccountException {
+        Set<Integer> stateSet = new HashSet<>();// 璁㈠崟鐘舵�丼et
+        if (commonOrderList != null && commonOrderList.size() > 0) {
+            int orderType = commonOrderList.get(0).getSourceType();
+
+            boolean miandan = false;
+            Map<Integer, HongBaoOrder> notificationMap = new HashMap<>();
+            int goodsCount = 0;
+            boolean hasAdd = false;
+            boolean hasUpdate = 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) {
+                    miandan = saveHongBao(commonOrder, type, notificationMap);
+                    hasAdd = true;
+                } else {
+                    boolean update = updateHongBao(hongBaoOrder, commonOrder, type, notificationMap);
+                    if (update)
+                        hasUpdate = true;
+                }
+            }
+
+            /**
+             * 閫氱煡鐢ㄦ埛鐨勮繑鍒╂儏鍐�
+             */
+            int state = getOrderState(stateSet);
+            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();
+                    String orderId = commonOrderList.get(0).getOrderNo();
+                    Long uid = notify.getUserInfo().getId();
+                    BigDecimal money = notify.getMoney();
+                    switch (t) {
+                        case HongBaoV2.TYPE_ZIGOU:
+                            userOrderMsgNotificationService.orderFanLiStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, goodsCount, commonOrder.getState(),
+                                    commonOrder.getThirdCreateTime());
+
+                            break;
+                        case HongBaoV2.TYPE_SHARE_GOODS:
+
+                            userOrderMsgNotificationService.orderShareStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, goodsCount, commonOrder.getState(),
+                                    commonOrder.getThirdCreateTime());
+
+                            break;
+                        case HongBaoV2.TYPE_YIJI:
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
+                                    commonOrder.getThirdCreateTime());
+                            break;
+                        case HongBaoV2.TYPE_ERJI:
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
+                                    commonOrder.getThirdCreateTime());
+                            break;
+
+                        case HongBaoV2.TYPE_SHARE_YIJI:
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
+                                    commonOrder.getThirdCreateTime());
+
+                        case HongBaoV2.TYPE_SHARE_ERJI:
+                            userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+                                    commonOrder.getPayment(), money, new BigDecimal(0), goodsCount, commonOrder.getState(),
+                                    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 boolean updateHongBao(HongBaoOrder hongBaoOrder, CommonOrder commonOrder, int type,
+                                  Map<Integer, HongBaoOrder> notificationMap) throws HongBaoException, UserAccountException {
+        System.out.println(commonOrder.getOrderNo());
+        // 閿佽
+        HongBaoV2 oldHongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoOrder.getHongBaoV2().getId());
+        if (oldHongBao == null)
+            throw new HongBaoException(10, "绾㈠寘瀵硅薄涓嶅瓨鍦�");
+        // 宸茬粡澶辨晥锛屽凡缁忛鍙栵紝棰嗗彇涓紝鏂拌�佺姸鎬佷竴鑷寸殑绾㈠寘涓嶅仛澶勭悊
+        if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO || oldHongBao.getState() == HongBaoV2.STATE_YILINGQU|| oldHongBao.getState() == HongBaoV2.STATE_LINGQUING)
+            return false;
+
+        SystemEnum system = userInfoService.getUserSystem(commonOrder.getUserInfo().getId());
+
+        if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
+            BigDecimal fanliRate = hongBaoManageService.getFanLiRate(UserLevelEnum.daRen,
+                    commonOrder.getCreateTime().getTime(), system);
+            // 鍏嶅崟澶勭悊
+            boolean mianDan = false;
+            List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
+                    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 = new HongBaoV2(hongBaoOrder.getHongBaoV2().getId());
+            hongBao.setUpdateTime(new Date());
+            // 鏇存敼鐘舵�佷笌璧勯噾
+            if (commonOrder.getState() == CommonOrder.STATE_FK) {
+                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+                if (mianDan)
+                    hongBao.setMoney(commonOrder.getPayment());
+            } else if (commonOrder.getState() == CommonOrder.STATE_JS
+                    || commonOrder.getState() == CommonOrder.STATE_WQ) {
+                hongBao.setState(HongBaoV2.STATE_KELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+                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));
+            }
+
+            // 鏂拌�佺孩鍖呯姸鎬佷竴鑷翠笉澶勭悊
+            if (oldHongBao.getState().intValue() == hongBao.getState())
+                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());
+                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)
+                for (HongBaoV2 child : children) {
+                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
+                        continue;
+
+                    HongBaoV2 childUpdate = new HongBaoV2(child.getId());
+                    childUpdate.setState(hongBao.getState());
+                    childUpdate.setUpdateTime(new Date());
+                    BigDecimal rate = null;
+                    if (child.getType() == HongBaoV2.TYPE_YIJI) {// 涓�绾у垎浜禋
+                        rate = hongBaoManageService.getFirstInviteRate(child.getUrank(),
+                                commonOrder.getCreateTime().getTime(), system);
+                    } else if (child.getType() == HongBaoV2.TYPE_ERJI) {// 浜岀骇鍒嗕韩璧�
+                        rate = hongBaoManageService.getSecondInviteRate(child.getUrank(),
+                                commonOrder.getCreateTime().getTime(), system);
+                    }
+
+                    // 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
+                    if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
+                        childUpdate.setMoney(
+                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+                        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")));
+                    } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+                        childUpdate.setMoney(
+                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+                    }
+                    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());
+                        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() <= commonOrder.getThirdCreateTime().getTime()) {
+                        UserInfo boss = threeSaleSerivce.getBoss(commonOrder.getUserInfo().getId());
+                        // 鎻掑叆涓�绾у瓙绾㈠寘
+                        BigDecimal firstRate = hongBaoManageService
+                                .getFirstInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
+                        if (firstRate.compareTo(new BigDecimal(0)) <= 0)
+                            return true;
+                        HongBaoV2 firstHongbao = new HongBaoV2();
+                        firstHongbao.setUserInfo(boss);
+                        firstHongbao.setUrank(boss.getRank());
+                        firstHongbao.setParent(hongBao);
+                        firstHongbao.setCreateTime(new Date());
+                        firstHongbao.setType(HongBaoV2.TYPE_YIJI);
+                        firstHongbao.setVersion(2);
+                        firstHongbao.setState(hongBao.getState());
+                        firstHongbao.setOrderType(commonOrder.getSourceType());
+
+                        if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
+                            firstHongbao.setMoney(
+                                    MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
+                            Calendar calendar = Calendar.getInstance();
+                            calendar.setTime(commonOrder.getSettleTime());
+                            calendar.add(Calendar.MONTH, 1);
+                            firstHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+                                    "yyyy-M-dd")));
+                        } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+                            firstHongbao.setMoney(
+                                    MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
+                        } else if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) {
+                            firstHongbao.setMoney(new BigDecimal(0));
+                        }
+
+                        if (firstHongbao.getMoney() != null
+                                && firstHongbao.getMoney().compareTo(new BigDecimal(0)) > 0) {
+                            hongBaoV2Mapper.insertSelective(firstHongbao);
+                            // 鐢ㄦ埛閫氱煡
+                            if (notificationMap.get(HongBaoV2.TYPE_YIJI) == null) {
+                                HongBaoV2 tempHongBao = new HongBaoV2(firstHongbao.getId());
+                                tempHongBao.setUserInfo(firstHongbao.getUserInfo());
+                                tempHongBao.setMoney(firstHongbao.getMoney());
+                                CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                                tempCommonOrder.setPayment(commonOrder.getPayment());
+                                notificationMap.put(HongBaoV2.TYPE_YIJI,
+                                        new HongBaoOrder(tempCommonOrder, tempHongBao));
+                            } else {
+                                // 澧炲姞浠樻閲戦涓庤祫閲�
+                                HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_YIJI);
+                                tempHongBaoOrder.getCommonOrder().setPayment(
+                                        tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                                tempHongBaoOrder.getHongBaoV2().setMoney(
+                                        tempHongBaoOrder.getHongBaoV2().getMoney().add(firstHongbao.getMoney()));
+                                notificationMap.put(HongBaoV2.TYPE_YIJI, tempHongBaoOrder);
+                            }
+                        }
+
+                        // 鎻掑叆浜岀骇瀛愮孩鍖�
+                        boss = threeSaleSerivce.getBoss(boss.getId());
+                        if (boss != null) {// 浜岀骇BOSS瀛樺湪
+                            BigDecimal secondRate = hongBaoManageService
+                                    .getSecondInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
+                            if (secondRate.compareTo(new BigDecimal(0)) <= 0)
+                                return true;
+                            HongBaoV2 secondHongbao = new HongBaoV2();
+                            secondHongbao.setUserInfo(boss);
+                            secondHongbao.setUrank(boss.getRank());
+                            secondHongbao.setParent(hongBao);
+                            secondHongbao.setCreateTime(new Date());
+                            secondHongbao.setType(HongBaoV2.TYPE_ERJI);
+                            secondHongbao.setVersion(2);
+                            secondHongbao.setState(hongBao.getState());
+                            secondHongbao.setOrderType(commonOrder.getSourceType());
+                            if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
+                                secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
+                                        secondRate.divide(new BigDecimal(100))));
+                                Calendar calendar = Calendar.getInstance();
+                                calendar.setTime(commonOrder.getSettleTime());
+                                calendar.add(Calendar.MONTH, 1);
+                                secondHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                                        calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+                                        "yyyy-M-dd")));
+                            } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+                                secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
+                                        secondRate.divide(new BigDecimal(100))));
+                            } else if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
+                                secondHongbao.setMoney(new BigDecimal(0));
+                            if (secondHongbao.getMoney() != null
+                                    && secondHongbao.getMoney().compareTo(new BigDecimal(0)) > 0) {
+                                hongBaoV2Mapper.insertSelective(secondHongbao);
+                                // 鐢ㄦ埛閫氱煡
+                                if (notificationMap.get(HongBaoV2.TYPE_ERJI) == null) {
+                                    HongBaoV2 tempHongBao = new HongBaoV2(secondHongbao.getId());
+                                    tempHongBao.setUserInfo(secondHongbao.getUserInfo());
+                                    tempHongBao.setMoney(secondHongbao.getMoney());
+                                    CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                                    tempCommonOrder.setPayment(commonOrder.getPayment());
+                                    notificationMap.put(HongBaoV2.TYPE_ERJI,
+                                            new HongBaoOrder(tempCommonOrder, tempHongBao));
+                                } else {
+                                    // 澧炲姞浠樻閲戦涓庤祫閲�
+                                    HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_ERJI);
+                                    tempHongBaoOrder.getCommonOrder().setPayment(tempHongBaoOrder.getCommonOrder()
+                                            .getPayment().add(commonOrder.getPayment()));
+                                    tempHongBaoOrder.getHongBaoV2().setMoney(
+                                            tempHongBaoOrder.getHongBaoV2().getMoney().add(secondHongbao.getMoney()));
+                                    notificationMap.put(HongBaoV2.TYPE_ERJI, tempHongBaoOrder);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
+            BigDecimal fanliRate = null;
+            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO
+                    && commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))
+                fanliRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime(), system);
+            else
+                fanliRate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,
+                        commonOrder.getCreateTime().getTime(), system);
+
+            List<ShareGoodsActivityOrder> list = shareGoodsActivityOrderService
+                    .listByOrderIdAndUid(commonOrder.getUserInfo().getId(), commonOrder.getOrderNo());
+            if (list != null && list.size() > 0) {
+                fanliRate = list.get(0).getShareRate();
+            }
+
+            HongBaoV2 hongBao = new HongBaoV2(hongBaoOrder.getHongBaoV2().getId());
+            hongBao.setUpdateTime(new Date());
+            // 鏇存敼鐘舵�佷笌璧勯噾
+            if (commonOrder.getState() == CommonOrder.STATE_FK) {
+                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+            } else if (commonOrder.getState() == CommonOrder.STATE_JS
+                    || commonOrder.getState() == CommonOrder.STATE_WQ) {
+                hongBao.setState(HongBaoV2.STATE_KELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+                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));
+            }
+            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());
+                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)
+                for (HongBaoV2 child : children) {
+                    if (child.getState() == HongBaoV2.STATE_YILINGQU||child.getState() == HongBaoV2.STATE_LINGQUING)
+                        continue;
+
+                    HongBaoV2 childUpdate = new HongBaoV2(child.getId());
+                    // 缁熶竴璁剧疆鐘舵��
+                    childUpdate.setState(hongBao.getState());
+                    childUpdate.setUpdateTime(new Date());
+                    BigDecimal rate = null;
+                    if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {// 涓�绾у垎浜禋
+                        rate = hongBaoManageService.getFirstShareRate(1, commonOrder.getCreateTime().getTime(), system);
+                    } else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {// 浜岀骇鍒嗕韩璧�
+                        rate = hongBaoManageService.getSecondShareRate(1, commonOrder.getCreateTime().getTime(), system);
+                    }
+
+                    // 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
+                    if (CommonOrder.STATE_JS == commonOrder.getState()
+                            || CommonOrder.STATE_WQ == commonOrder.getState()) {
+                        childUpdate.setMoney(
+                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+                        if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
+                                "yyyy-MM-dd"))
+                            childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
+                                    rate.divide(new BigDecimal(100))));
+
+                        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")));
+                    } else if (CommonOrder.STATE_FK == commonOrder.getState()) {
+                        if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-16",
+                                "yyyy-MM-dd"))
+                            childUpdate.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
+                                    rate.divide(new BigDecimal(100))));
+                        else
+                            childUpdate.setMoney(
+                                    MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))));
+                    }
+                    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());
+                        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 boolean saveHongBao(CommonOrder commonOrder, int type, Map<Integer, HongBaoOrder> notificationMap)
+            throws HongBaoException, UserAccountException {
+        SystemEnum system = userInfoService.getUserSystem(commonOrder.getUserInfo().getId());
+        if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
+            BigDecimal fanliRate = hongBaoManageService.getFanLiRate(UserLevelEnum.daRen,
+                    commonOrder.getCreateTime().getTime(), system);
+            // 鏌ヨ鏄惁鏈夊厤鍗曡鍒�
+            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 = new HongBaoV2();
+            hongBao.setUserInfo(commonOrder.getUserInfo());
+            hongBao.setCreateTime(new Date());
+            hongBao.setType(HongBaoV2.TYPE_ZIGOU);
+            hongBao.setVersion(2);
+            if (commonOrder.getState() == CommonOrder.STATE_FK) {
+                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+            } else if (commonOrder.getState() == CommonOrder.STATE_JS
+                    || CommonOrder.STATE_WQ == commonOrder.getState()) {
+                hongBao.setState(HongBaoV2.STATE_KELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+                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(user.getRank());
+            hongBao.setOrderType(commonOrder.getSourceType());
+            hongBaoV2Mapper.insertSelective(hongBao);
+            // 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠
+            HongBaoOrder hongBaoOrder = new HongBaoOrder();
+            hongBaoOrder.setCommonOrder(commonOrder);
+            hongBaoOrder.setCreateTime(new Date());
+            hongBaoOrder.setHongBaoV2(hongBao);
+            hongBaoOrderMapper.insertSelective(hongBaoOrder);
+            // 鍔犲叆閫氱煡
+            if (notificationMap.get(type) == 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());
+                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);
+            }
+
+            UserInfo boss = threeSaleSerivce.getBoss(user.getId());
+            if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO && mianDanMoney == null) {// 1绾OSS瀛樺湪涓旂孩鍖呮湭澶辨晥,鍏嶅崟涓嶆敮鎸佸绾у垎閿�
+
+                // 鎻掑叆涓�绾у瓙绾㈠寘
+                BigDecimal firstRate = hongBaoManageService
+                        .getFirstInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
+                if (firstRate.compareTo(new BigDecimal(0)) <= 0)
+                    return mianDanMoney != null;
+                HongBaoV2 firstHongbao = new HongBaoV2();
+                firstHongbao.setUserInfo(boss);
+                firstHongbao.setUrank(boss.getRank());
+                firstHongbao.setParent(hongBao);
+                firstHongbao.setCreateTime(new Date());
+                firstHongbao.setType(HongBaoV2.TYPE_YIJI);
+                firstHongbao.setVersion(2);
+                firstHongbao.setState(hongBao.getState());
+                firstHongbao.setOrderType(commonOrder.getSourceType());
+
+                if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
+                    firstHongbao.setMoney(
+                            MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(commonOrder.getSettleTime());
+                    calendar.add(Calendar.MONTH, 1);
+                    firstHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                            calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+                            "yyyy-M-dd")));
+                } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+                    firstHongbao.setMoney(
+                            MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
+                }
+                // 杩斿埄涓�0鐨勪笉閫氱煡
+                if (firstHongbao.getMoney() == null || firstHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
+                    return mianDanMoney != null;
+
+                hongBaoV2Mapper.insertSelective(firstHongbao);
+                // 鐢ㄦ埛閫氱煡
+                if (notificationMap.get(HongBaoV2.TYPE_YIJI) == null) {
+                    HongBaoV2 tempHongBao = new HongBaoV2(firstHongbao.getId());
+                    tempHongBao.setUserInfo(firstHongbao.getUserInfo());
+                    tempHongBao.setMoney(firstHongbao.getMoney());
+                    CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                    tempCommonOrder.setPayment(commonOrder.getPayment());
+                    notificationMap.put(HongBaoV2.TYPE_YIJI, new HongBaoOrder(tempCommonOrder, tempHongBao));
+                } else {
+                    // 澧炲姞浠樻閲戦涓庤祫閲�
+                    HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_YIJI);
+                    tempHongBaoOrder.getCommonOrder()
+                            .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                    tempHongBaoOrder.getHongBaoV2()
+                            .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(firstHongbao.getMoney()));
+                    notificationMap.put(HongBaoV2.TYPE_YIJI, tempHongBaoOrder);
+                }
+
+                // 鎻掑叆浜岀骇瀛愮孩鍖�
+                boss = threeSaleSerivce.getBoss(boss.getId());
+                if (boss != null) {// 浜岀骇BOSS瀛樺湪
+                    BigDecimal secondRate = hongBaoManageService
+                            .getSecondInviteRate(boss.getRank() == null ? 0 : boss.getRank(), system);
+                    if (secondRate.compareTo(new BigDecimal(0)) <= 0)
+                        return mianDanMoney != null;
+                    HongBaoV2 secondHongbao = new HongBaoV2();
+                    secondHongbao.setUserInfo(boss);
+                    secondHongbao.setUrank(boss.getRank());
+                    secondHongbao.setParent(hongBao);
+                    secondHongbao.setCreateTime(new Date());
+                    secondHongbao.setType(HongBaoV2.TYPE_ERJI);
+                    secondHongbao.setVersion(2);
+                    secondHongbao.setState(hongBao.getState());
+                    secondHongbao.setOrderType(commonOrder.getSourceType());
+                    if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
+                        secondHongbao.setMoney(
+                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100))));
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(commonOrder.getSettleTime());
+                        calendar.add(Calendar.MONTH, 1);
+                        secondHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+                                calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
+                                "yyyy-M-dd")));
+                    } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
+                        secondHongbao.setMoney(
+                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100))));
+                    }
+
+                    // 杩斿埄涓�0鐨勪笉缁熻
+                    if (secondHongbao.getMoney() == null || secondHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
+                        return mianDanMoney != null;
+
+                    hongBaoV2Mapper.insertSelective(secondHongbao);
+
+                    // 鐢ㄦ埛閫氱煡
+                    if (notificationMap.get(HongBaoV2.TYPE_ERJI) == null) {
+                        HongBaoV2 tempHongBao = new HongBaoV2(secondHongbao.getId());
+                        tempHongBao.setUserInfo(secondHongbao.getUserInfo());
+                        tempHongBao.setMoney(secondHongbao.getMoney());
+                        CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                        tempCommonOrder.setPayment(commonOrder.getPayment());
+                        notificationMap.put(HongBaoV2.TYPE_ERJI, new HongBaoOrder(tempCommonOrder, tempHongBao));
+                    } else {
+                        // 澧炲姞浠樻閲戦涓庤祫閲�
+                        HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_ERJI);
+                        tempHongBaoOrder.getCommonOrder().setPayment(
+                                tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                        tempHongBaoOrder.getHongBaoV2()
+                                .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(secondHongbao.getMoney()));
+                        notificationMap.put(HongBaoV2.TYPE_ERJI, tempHongBaoOrder);
+                    }
+                }
+
+            }
+            return mianDanMoney != null;
+        } else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
+            // 鍒嗕韩璧氫笉鍔犲叆澶辨晥鐨勮鍗�
+            if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
+                return false;
+            // 鍒嗕韩璧�
+            BigDecimal shareRate = null;
+            if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO
+                    && commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))// 鏉ヨ嚜浜庢窐绀奸噾鐨勫垎浜�
+                shareRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime(), system);
+            else
+                shareRate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,
+                        commonOrder.getCreateTime().getTime(), system);
+
+            UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+
+            // 鍒ゆ柇璁㈠崟鍒嗕韩娲诲姩鏄惁寮�鍚�
+            if ("1".equalsIgnoreCase(configService.getValue(ConfigKeyEnum.shareGoodsActivityOpen.getKey(), user.getSystem()))) {
+                // 娌℃湁璁㈠崟锛屽苟涓旀槸娓犻亾ID鏉ョ殑锛屽苟涓�
+                UserExtraTaoBaoInfo taoBaoExtraInfo = userExtraTaoBaoInfoService
+                        .getByUid(commonOrder.getUserInfo().getId());
+                if (taoBaoExtraInfo != null && ((!StringUtil.isNullOrEmpty(taoBaoExtraInfo.getTaoBaoOrderEnd6Num())
+                        && !commonOrder.getOrderNo().endsWith(taoBaoExtraInfo.getTaoBaoOrderEnd6Num().trim()))
+                        || StringUtil.isNullOrEmpty(taoBaoExtraInfo.getTaoBaoOrderEnd6Num()))) {
+                    List<TaoBaoOrder> taoBaoOrderList = taoBaoOrderMapper
+                            .selectTaoBaoOrderByOrderId(commonOrder.getOrderNo());
+                    if (taoBaoOrderList != null && taoBaoOrderList.size() > 0
+                            && !StringUtil.isNullOrEmpty(taoBaoOrderList.get(0).getRelationId())) {
+                        if (shareGoodsActivityOrderService.listByUid(commonOrder.getUserInfo().getId()).size() < 1) {
+                            shareRate = new BigDecimal(hongBaoManageService.get("share_activity_proportion", system));
+                            try {
+                                shareGoodsActivityOrderService.addShareGoodsActivityOrder(
+                                        commonOrder.getUserInfo().getId(), shareRate, commonOrder.getOrderNo());
+                            } catch (ShareGoodsActivityOrderException e) {
+                                try {
+                                    LogHelper.errorDetailInfo(e);
+                                } catch (Exception e1) {
+                                    e1.printStackTrace();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            HongBaoV2 hongBao = new HongBaoV2();
+            hongBao.setCreateTime(new Date());
+            hongBao.setType(HongBaoV2.TYPE_SHARE_GOODS);
+            hongBao.setVersion(2);
+            if (commonOrder.getState() == CommonOrder.STATE_FK) {
+                hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), shareRate.divide(new BigDecimal(100))));
+            } else if (commonOrder.getState() == CommonOrder.STATE_JS
+                    || commonOrder.getState() == CommonOrder.STATE_WQ) {
+                hongBao.setState(HongBaoV2.STATE_KELINGQU);
+                hongBao.setMoney(
+                        MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), shareRate.divide(new BigDecimal(100))));
+                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")));
+            }
+
+            if (user == null)
+                throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
+            hongBao.setUrank(user.getRank());
+            hongBao.setUserInfo(user);
+            hongBao.setOrderType(commonOrder.getSourceType());
+            hongBaoV2Mapper.insertSelective(hongBao);
+            // 鎻掑叆绾㈠寘涓庤鍗曟槧灏�
+            HongBaoOrder hongBaoOrder = new HongBaoOrder();
+            hongBaoOrder.setCommonOrder(commonOrder);
+            hongBaoOrder.setCreateTime(new Date());
+            hongBaoOrder.setHongBaoV2(hongBao);
+            hongBaoOrderMapper.insertSelective(hongBaoOrder);
+
+            if (notificationMap.get(type) == 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());
+                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);
+            }
+
+            // 4鏈�17鏃ュ悗鎵嶆湁涓�绾у垎浜禋
+            if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-17", "yyyy-MM-dd")) {
+                UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
+                if (boss != null) {
+                    BigDecimal firstLevelRate = hongBaoManageService.getFirstShareRate(1,
+                            commonOrder.getThirdCreateTime().getTime(), system);
+                    HongBaoV2 child = new HongBaoV2();
+                    child.setParent(hongBao);
+                    child.setType(HongBaoV2.TYPE_SHARE_YIJI);
+                    if (commonOrder.getState() == CommonOrder.STATE_FK) {
+                        child.setState(HongBaoV2.STATE_BUKELINGQU);
+                        child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
+                                firstLevelRate.divide(new BigDecimal(100))));
+                    } else if (commonOrder.getState() == CommonOrder.STATE_JS
+                            || commonOrder.getState() == CommonOrder.STATE_WQ) {
+                        child.setState(HongBaoV2.STATE_KELINGQU);
+                        child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
+                                firstLevelRate.divide(new BigDecimal(100))));
+                        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(boss);
+                    child.setUrank(boss.getRank());
+                    child.setVersion(2);
+                    child.setCreateTime(new Date());
+                    child.setOrderType(commonOrder.getSourceType());
+                    if (child.getMoney() != null && child.getMoney().compareTo(new BigDecimal(0)) > 0) {
+                        hongBaoV2Mapper.insertSelective(child);
+                        // 娣诲姞閫氱煡
+                        if (notificationMap.get(HongBaoV2.TYPE_SHARE_YIJI) == null) {
+                            HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
+                            tempHongBao.setUserInfo(child.getUserInfo());
+                            tempHongBao.setMoney(child.getMoney());
+                            tempHongBao.setBeizhu(hongBao.getUserInfo().getNickName());
+                            CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+                            tempCommonOrder.setPayment(commonOrder.getPayment());
+                            notificationMap.put(HongBaoV2.TYPE_SHARE_YIJI,
+                                    new HongBaoOrder(tempCommonOrder, tempHongBao));
+                        } else {
+                            // 澧炲姞浠樻閲戦涓庤祫閲�
+                            HongBaoOrder tempHongBaoOrder = notificationMap.get(HongBaoV2.TYPE_SHARE_YIJI);
+                            tempHongBaoOrder.getCommonOrder().setPayment(
+                                    tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+                            tempHongBaoOrder.getHongBaoV2()
+                                    .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
+                            notificationMap.put(HongBaoV2.TYPE_SHARE_YIJI, tempHongBaoOrder);
+                        }
+                    }
+                }
+            }
+
+            // 淇敼缁熻鏁版嵁
+            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());
+
+            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 false;
+    }
+
+    @Override
+    public List<HongBaoDTO> listJiangJinByUid(Long uid, int page, int pageSize) {
+        return hongBaoV2Mapper.listJiangJinByUid(uid, (page - 1) * pageSize, pageSize);
+    }
+
+    @Override
+    public long countJiangJinByUid(Long uid) {
+        Long count = hongBaoV2Mapper.countJiangJinByUid(uid);
+        return count == null ? 0 : count;
+    }
+
+    @Override
+    public BigDecimal getTotalTiChengMoney(Long uid) {
+
+        return hongBaoV2Mapper.getTotalTiChengMoney(uid);
+    }
+
+    @Override
+    public int getTotalTiChengCount(Long uid) {
+        return hongBaoV2Mapper.getTotalTiChengCount(uid);
+    }
+
+    @Override
+    public BigDecimal getUnGetTiChengMoney(Long uid) {
+        return hongBaoV2Mapper.getUnGetTiChengMoney(uid);
+    }
+
+    @Override
+    public BigDecimal getTotalFanLiMoney(Long uid) {
+        BigDecimal money = hongBaoV2Mapper.getTotalFanLiMoney(uid);
+        return money == null ? new BigDecimal(0) : money;
+    }
+
+    @Override
+    public BigDecimal getUnRecievedFanLiMoney(Long uid) {
+        BigDecimal money = hongBaoV2Mapper.getUnRecievedFanLiMoney(uid);
+        return money == null ? new BigDecimal(0) : money;
+    }
+
+    @Override
+    public BigDecimal getUnRecievedMoneyWithCreateTime(Long uid, Date minDate, Date maxDate) {
+        BigDecimal money = hongBaoV2Mapper.getUnRecievedMoneyWithCreateTime(uid, minDate, maxDate);
+        if (money == null)
+            return new BigDecimal(0);
+        else
+            return money;
+    }
+
+    @Override
+    public BigDecimal getUnRecievedMoneyWithPreGetTime(Long uid, Date minDate, Date maxDate) {
+        BigDecimal money = hongBaoV2Mapper.getUnRecievedMoneyWithPreGetTime(uid, minDate, maxDate);
+        if (money == null)
+            return new BigDecimal(0);
+        else
+            return money;
+    }
+
+    @Override
+    public BigDecimal computeMoneyByUidAndState(Long uid, int state) {
+        List<Integer> stateList = new ArrayList<>();
+        stateList.add(state);
+        BigDecimal money = hongBaoV2Mapper.computeMoneyByUidAndState(uid, stateList);
+        if (money == null)
+            return new BigDecimal(0);
+        else
+            return money;
+    }
+
+    @Override
+    public List<HongBaoV2> listChildrenById(Long id) {
+        return hongBaoV2Mapper.listChildrenById(id);
+    }
+
+    @Override
+    public List<HongBaoV2> listChildrenByIds(List<Long> idList) {
+        if (idList == null || idList.size() == 0)
+            return null;
+        return hongBaoV2Mapper.listChildrenByIds(idList);
+    }
+
+    @Override
+    public List<Long> getUidByNear30DayShareSucceed() {
+        return hongBaoV2Mapper.getUidByNear30DayShareSucceed();
+    }
+
+    @Override
+    public void invalidInviteHongBaoByParentUid(Long parentUid, String beiZhu) {
+        List<Integer> typeList = new ArrayList<>();
+        typeList.add(HongBaoV2.TYPE_YIJI);
+        typeList.add(HongBaoV2.TYPE_ERJI);
+        typeList.add(HongBaoV2.TYPE_SHARE_YIJI);
+        typeList.add(HongBaoV2.TYPE_SHARE_ERJI);
+        List<Integer> stateList = new ArrayList<>();
+        stateList.add(HongBaoV2.STATE_KELINGQU);
+        stateList.add(HongBaoV2.STATE_BUKELINGQU);
+        long count = hongBaoV2Mapper.countByParentUidAndTypeAndState(parentUid, typeList, stateList);
+        int page = (int) (count % 100 == 0 ? count / 100 : count / 100 + 1);
+        for (int i = 1; i <= page; i++) {
+            List<HongBaoV2> list = hongBaoV2Mapper.listByParentUidAndTypeAndState(parentUid, typeList, stateList, 0,
+                    100);
+            if (list != null)
+                for (HongBaoV2 v2 : list) {
+                    HongBaoV2 update = new HongBaoV2(v2.getId());
+                    update.setUpdateTime(new Date());
+                    update.setState(HongBaoV2.STATE_SHIXIAO);
+                    update.setBeizhu(beiZhu);
+                    hongBaoV2Mapper.updateByPrimaryKeySelective(update);
+                }
+        }
+    }
+
+    @Override
+    public List<HongBaoV2> listBySourceTypeAndTradeIdListAndUid(int sourceType, long uid, List<String> tradeIdList) {
+        if (tradeIdList == null || tradeIdList.size() == 0)
+            return null;
+        return hongBaoV2Mapper.listBySourceTypeAndTradeIdListAndUid(sourceType, uid, tradeIdList);
+    }
+
+    @Override
+    public HongBaoV2 getFirstValidHongBaoByTypeAndUid(List<Integer> typeList, Long uid) {
+        List<Integer> stateList = new ArrayList<>();
+        stateList.add(HongBaoV2.STATE_BUKELINGQU);
+        stateList.add(HongBaoV2.STATE_KELINGQU);
+        stateList.add(HongBaoV2.STATE_LINGQUING);
+        stateList.add(HongBaoV2.STATE_YILINGQU);
+        List<HongBaoV2> hongBaoV2List = hongBaoV2Mapper.listByStateAndTypeAndUid(stateList, typeList, uid, 0, 1);
+        if (hongBaoV2List != null && hongBaoV2List.size() > 0)
+            return hongBaoV2List.get(0);
+        return null;
+    }
+
+    @Override
+    public List<HongBaoV2> listByIds(List<Long> idList) {
+        return hongBaoV2Mapper.listByIds(idList);
+    }
+
+    @Override
+    public List<HongBaoDTO> listByOrderTradeId(String tradeId) {
+        return hongBaoV2Mapper.listByOrderTradeId(tradeId);
+    }
+
+    @Override
+    public Integer getDirectBossUrankByPid(Long pid) {
+        return hongBaoV2Mapper.getDirectBossUrankByPid(pid);
+    }
+
+    @Transactional
+    @Override
+    public void setHongBaoRecieved(Long uid, List<Integer> typeList, Date preGetTime) {
+        hongBaoV2Mapper.setHongBaoRecieved(uid, typeList, preGetTime);
+    }
+
+
+}

--
Gitblit v1.8.0