From d8359ddb48dab5cc797a9d552e11fde571f4920c Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期二, 27 八月 2019 12:32:46 +0800 Subject: [PATCH] Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java | 502 +++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 316 insertions(+), 186 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java index 945f3a3..6c2ad62 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java @@ -13,7 +13,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.yeshi.fanli.dao.mybatis.AccountDetailsMapper; import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper; import com.yeshi.fanli.dao.mybatis.UserInfoMapper; import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper; @@ -21,24 +20,28 @@ import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper; import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper; import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanDrawBackMapper; -import com.yeshi.fanli.entity.bus.user.AccountDetails; import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.money.UserMoneyDebt; +import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum; import com.yeshi.fanli.entity.money.UserMoneyDetail; +import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.order.HongBaoOrder; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; import com.yeshi.fanli.exception.TaoBaoWeiQuanException; +import com.yeshi.fanli.exception.money.UserMoneyDebtException; import com.yeshi.fanli.exception.money.UserMoneyDetailException; import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.service.inter.money.UserMoneyDebtService; +import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService; import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService; import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanOrderService; -import com.yeshi.fanli.service.inter.user.UserNotificationService; +import com.yeshi.fanli.service.inter.user.UserMoneyService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.factory.AccountDetailsFactory; import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; import com.yeshi.fanli.vo.order.CommonOrderVO; @@ -60,12 +63,6 @@ private UserMoneyDetailMapper userMoneyDetailMapper; @Resource - private AccountDetailsMapper accountDetailsMapper; - - @Resource - private UserNotificationService userNotificationService; - - @Resource private CommonOrderMapper commonOrderMapper; @Resource @@ -74,10 +71,47 @@ @Resource private HongBaoOrderMapper hongBaoOrderMapper; + @Resource + private UserMoneyMsgNotificationService userMoneyMsgNotificationService; + + @Resource + private UserMoneyDebtService userMoneyDebtService; + + @Resource + private UserMoneyService userMoneyService; + @Override public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) { taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(taoBaoWeiQuanDrawBack.getOrderItemId(), taoBaoWeiQuanDrawBack.getUser().getId()); + } + + @Transactional + private void addDebt(Long uid, Long hbId, BigDecimal money) throws UserMoneyDebtException { + UserMoneyDebt debt = new UserMoneyDebt(); + debt.setBeiZhu(null); + debt.setCreateTime(new Date()); + debt.setLeftMoney(money); + debt.setOriginMoney(money); + debt.setSourceId(hbId); + debt.setType(UserMoneyDebtTypeEnum.order); + debt.setUid(uid); + userMoneyDebtService.addUserMoneyDebt(debt); + } + + /** + * 璁$畻閫�娆鹃噾棰� + * + * @param settlement + * @param wqMoney + * @param hongBaoMoney + * @return + */ + private BigDecimal computeDrawBackMoney(BigDecimal settlement, BigDecimal wqMoney, BigDecimal hongBaoMoney) { + BigDecimal money = (hongBaoMoney.multiply(wqMoney)).divide(settlement, 2, BigDecimal.ROUND_UP); + if (money.compareTo(hongBaoMoney) > 0) + money = hongBaoMoney; + return money; } @Transactional @@ -89,13 +123,6 @@ List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId); if (list == null || list.size() == 0) return; - // 鏌ヨ璁㈠崟搴� - List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId); - // 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲� - BigDecimal sumFee = new BigDecimal("0"); - for (TaoBaoOrder order : orderList) - if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) - sumFee = sumFee.add(order.geteIncome()); // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) List<CommonOrderVO> typeList = new ArrayList<>(); @@ -104,18 +131,35 @@ cv.setOrderNo(orderId); typeList.add(cv); - List<CommonOrderVO> commonOrderList = commonOrderMapper.listByOrderNoAndType(typeList); + List<CommonOrderVO> commonOrderList = commonOrderMapper.listOrderGoodsInfo(typeList); List<HongBaoV2> mainHongBaoList = new ArrayList<>(); if (commonOrderList != null) for (CommonOrderVO vo : commonOrderList) { + // 淇敼璁㈠崟鐘舵�佷负缁存潈 + CommonOrder co = new CommonOrder(vo.getId()); + co.setState(CommonOrder.STATE_WQ); + co.setUpdateTime(new Date()); + commonOrderMapper.updateByPrimaryKeySelective(co); + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId()); - mainHongBaoList.add(hongBaoOrder.getHongBaoV2()); + if (hongBaoOrder.getCommonOrder() != null + && !StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getTradeId())) + // 鏌ヨ鏄惁宸茬粡缁存潈 + { + TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid( + hongBaoOrder.getCommonOrder().getTradeId(), + hongBaoOrder.getHongBaoV2().getUserInfo().getId()); + if (drawBack == null)// 娣诲姞杩樻湭鎵f鐨勫瓙璁㈠崟 + mainHongBaoList.add(hongBaoOrder.getHongBaoV2()); + } } if (mainHongBaoList == null || mainHongBaoList.size() == 0) return; for (int i = 0; i < mainHongBaoList.size(); i++) { + HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(mainHongBaoList.get(i).getId()); + mainHongBaoList.set(i, hb); // 鍙鐞嗚繑鍒╄鍗� - if (mainHongBaoList.get(i).getType() != HongBaoV2.TYPE_ZIGOU) { + if (hb.getType() != HongBaoV2.TYPE_ZIGOU) { mainHongBaoList.remove(i); i--; } @@ -129,7 +173,7 @@ if (mainHongBaoList != null) for (HongBaoV2 hongBao : mainHongBaoList) { - if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) + if (hongBao.getState() != HongBaoV2.STATE_YILINGQU) continue; // 绱涓荤孩鍖呯殑閲戦 if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) { @@ -144,43 +188,91 @@ while (its.hasNext()) { Long uid = its.next(); BigDecimal userGetMoney = fanMoneyMap.get(uid); - BigDecimal fanMoney = new BigDecimal("0"); + BigDecimal wqMoney = new BigDecimal("0"); // 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾 TaoBaoWeiQuanDrawBack weiQuanDrawBack = null; + List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>(); + BigDecimal settleMent = new BigDecimal(0); for (TaoBaoWeiQuanOrder weiQuanOrder : list) { weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), uid); if (weiQuanDrawBack != null) continue; + // 璁$畻缁撶畻閲戦 + TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId()); + if (taoBaoOrder == null) + throw new TaoBaoWeiQuanException(101, "鏈壘鍒板瓙璁㈠崟鐩稿叧鏁版嵁"); + + if (taoBaoOrder.getSettlement() == null) + throw new TaoBaoWeiQuanException(102, "娣樺疂缁撶畻閲戦涓虹┖"); + + settleMent = settleMent.add(taoBaoOrder.getSettlement()); + // 閫�娆剧殑璧勯噾 - fanMoney = fanMoney.add(weiQuanOrder.getFanMoney()); - // 鎻掑叆璁板綍 + wqMoney = wqMoney.add(weiQuanOrder.getMoney()); weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); weiQuanDrawBack.setCreateTime(new Date()); - // 鏆傛椂璁句负0 - weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0)); + + CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + weiQuanOrder.getOrderItemId()); + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + // 璁$畻閫�娆剧殑璧勯噾 + BigDecimal drawBack = null; + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) + drawBack = computeDrawBackMoney(commonOrder.getSettlement(), weiQuanOrder.getMoney(), + hongBaoOrder.getHongBaoV2().getMoney()); + + weiQuanDrawBack.setDrawBackMoney(drawBack); weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId()); weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); weiQuanDrawBack.setUser(new UserInfo(uid)); - taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack); + newWeiQuanDrawBackList.add(weiQuanDrawBack); } - if (fanMoney.compareTo(new BigDecimal("0")) <= 0) + if (wqMoney.compareTo(new BigDecimal("0")) <= 0) continue; + // 鎻掑叆璁板綍 + for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) { + taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack); + } + // 閫�娆鹃噾棰� - BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee); - userInfoMapper.subHongBaoByUid(uid, drawBackMoney); - // 娣诲姞璧勯噾璁板綍 - AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney, - AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid)); - accountDetailsMapper.insertSelective(accountDetails); + BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); + + // 璁$畻璧勯噾鏄惁鍏呰冻 + UserInfo user = userInfoMapper.selectByPKey(uid); + if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻 + { + // 娣诲姞鍊哄姟 + for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) { + TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId()); + if (taoBaoOrder != null) { + TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService + .selectByTradeId(drawBack.getOrderItemId()); + CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + drawBack.getOrderItemId()); + if (co != null) { + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId()); + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) { + BigDecimal drawback = computeDrawBackMoney(taoBaoOrder.getSettlement(), + weiQuanOrder.getMoney(), hongBaoOrder.getHongBaoV2().getMoney()); + try { + addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback); + } catch (UserMoneyDebtException e) { + throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父"); + } + } + } + } + } + continue; + } + + UserMoneyDetail userMoneyDetail = null; // 鏂扮増璧勯噾璁板綍 try { - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, - drawBackMoney); - userMoneyDetail.setId(accountDetails.getId()); - userMoneyDetailMapper.insert(userMoneyDetail); + userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney); } catch (UserMoneyDetailException e) { try { LogHelper.errorDetailInfo(e); @@ -188,8 +280,11 @@ e1.printStackTrace(); } } + userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); - userNotificationService.weiQuanFanli(uid, orderId, drawBackMoney); + // 鏂扮増閫氱煡 + userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, + userInfoMapper.selectByPKey(uid).getMyHongBao()); } } @@ -202,28 +297,34 @@ List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId); if (list == null || list.size() == 0) return; - // 鏌ヨ璁㈠崟搴� - List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId); - // 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲� - BigDecimal sumFee = new BigDecimal("0"); - for (TaoBaoOrder order : orderList) - if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) - sumFee = sumFee.add(order.geteIncome()); // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) - List<CommonOrderVO> typeList = new ArrayList<>(); CommonOrderVO cv = new CommonOrderVO(); cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO); cv.setOrderNo(orderId); typeList.add(cv); - List<CommonOrderVO> commonOrderList = commonOrderMapper.listByOrderNoAndType(typeList); + List<CommonOrderVO> commonOrderList = commonOrderMapper.listOrderGoodsInfo(typeList); List<HongBaoV2> mainHongBaoList = new ArrayList<>(); if (commonOrderList != null) for (CommonOrderVO vo : commonOrderList) { + // 鏇存敼璁㈠崟鐘舵�� + CommonOrder co = new CommonOrder(vo.getId()); + co.setState(CommonOrder.STATE_WQ); + co.setUpdateTime(new Date()); + commonOrderMapper.updateByPrimaryKeySelective(co); HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId()); - mainHongBaoList.add(hongBaoOrder.getHongBaoV2()); + if (hongBaoOrder.getCommonOrder() != null + && !StringUtil.isNullOrEmpty(hongBaoOrder.getCommonOrder().getTradeId())) + // 鏌ヨ鏄惁宸茬粡缁存潈 + { + TaoBaoWeiQuanDrawBack drawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid( + hongBaoOrder.getCommonOrder().getTradeId(), + hongBaoOrder.getHongBaoV2().getUserInfo().getId()); + if (drawBack == null)// 娣诲姞杩樻湭鎵f鐨勫瓙璁㈠崟 + mainHongBaoList.add(hongBaoOrder.getHongBaoV2()); + } } if (mainHongBaoList == null || mainHongBaoList.size() == 0) @@ -233,13 +334,13 @@ Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); if (mainHongBaoList != null) - for (HongBaoV2 hongBao : mainHongBaoList) { + for (HongBaoV2 hongBao : mainHongBaoList) {// 缁熻璁㈠崟涓嬬殑鎵�鏈変富绾㈠寘 hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId()); - if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) + if (hongBao.getState() != HongBaoV2.STATE_YILINGQU) continue; - // 杩斿埄绾㈠寘涓嶈鍏� - if (hongBao.getType() != HongBaoV2.TYPE_ZIGOU) { + // 鍙鍏ュ垎浜禋鐨勭孩鍖� + if (hongBao.getType() == HongBaoV2.TYPE_SHARE_GOODS) { // 绱涓荤孩鍖呯殑閲戦 if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) { fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney()); @@ -247,62 +348,99 @@ fanMoneyMap.put(hongBao.getUserInfo().getId(), fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney())); } - // 绱瀛愮孩鍖呯殑閲戦 - List<HongBaoV2> childHongBaoList = hongBaoV2Mapper.listChildrenById(hongBao.getId()); - if (childHongBaoList != null) - for (HongBaoV2 child : childHongBaoList) { - if (child.getState() == HongBaoV2.STATE_SHIXIAO) - continue; - if (fanMoneyMap.get(child.getUserInfo().getId()) == null) { - fanMoneyMap.put(child.getUserInfo().getId(), child.getMoney()); - } else - fanMoneyMap.put(child.getUserInfo().getId(), - fanMoneyMap.get(child.getUserInfo().getId()).add(child.getMoney())); - } } - // 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚� Iterator<Long> its = fanMoneyMap.keySet().iterator(); + // 鏌ヨ鍜岃繖涓鍗曟湁鍏崇殑鐢ㄦ埛锛堜富璁㈠崟锛� while (its.hasNext()) { Long uid = its.next(); BigDecimal userGetMoney = fanMoneyMap.get(uid); - BigDecimal fanMoney = new BigDecimal("0"); + BigDecimal wqMoney = new BigDecimal("0"); + BigDecimal settleMent = new BigDecimal("0"); // 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾 TaoBaoWeiQuanDrawBack weiQuanDrawBack = null; + + List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>(); for (TaoBaoWeiQuanOrder weiQuanOrder : list) { weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), uid); if (weiQuanDrawBack != null) continue; + // 璁$畻缁撶畻閲戦 + TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId()); + if (taoBaoOrder == null) + throw new TaoBaoWeiQuanException(101, "鏈壘鍒板瓙璁㈠崟鐩稿叧鏁版嵁"); + + if (taoBaoOrder.getSettlement() == null) + throw new TaoBaoWeiQuanException(102, "娣樺疂缁撶畻閲戦涓虹┖"); + + settleMent = settleMent.add(taoBaoOrder.getSettlement()); + // 閫�娆剧殑璧勯噾 - fanMoney = fanMoney.add(weiQuanOrder.getFanMoney()); + wqMoney = wqMoney.add(weiQuanOrder.getMoney()); // 鎻掑叆璁板綍 weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); weiQuanDrawBack.setCreateTime(new Date()); - // TODO 鏆傛椂璁句负0 - weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0)); + // 璁$畻閫�娆捐祫閲� + CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + weiQuanOrder.getOrderItemId()); + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + // 璁$畻閫�娆剧殑璧勯噾 + BigDecimal drawBack = null; + if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) + drawBack = computeDrawBackMoney(commonOrder.getSettlement(), weiQuanOrder.getMoney(), + hongBaoOrder.getHongBaoV2().getMoney()); + + weiQuanDrawBack.setDrawBackMoney(drawBack); + weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId()); weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); weiQuanDrawBack.setUser(new UserInfo(uid)); - taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack); + newWeiQuanDrawBackList.add(weiQuanDrawBack); } - if (fanMoney.compareTo(new BigDecimal("0")) <= 0) + if (wqMoney.compareTo(new BigDecimal("0")) <= 0) continue; // 閫�娆鹃噾棰� - BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee); - userInfoMapper.subHongBaoByUid(uid, drawBackMoney); - // 娣诲姞璧勯噾璁板綍 - AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney, - AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid)); - accountDetailsMapper.insertSelective(accountDetails); + BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); + if (drawBackMoney.compareTo(userGetMoney) > 0) + drawBackMoney = userGetMoney; + + for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) + taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack); + // 璁$畻璧勯噾鏄惁鍏呰冻 + UserInfo user = userInfoMapper.selectByPKey(uid); + if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻 + { + // 娣诲姞鍊哄姟 + for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) { + TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId()); + if (taoBaoOrder != null) { + TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService + .selectByTradeId(drawBack.getOrderItemId()); + BigDecimal settleMentMoney = taoBaoOrder.getSettlement(); + CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + weiQuanOrder.getOrderItemId()); + if (co != null) { + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId()); + BigDecimal drawback = computeDrawBackMoney(settleMentMoney, weiQuanOrder.getMoney(), + hongBaoOrder.getHongBaoV2().getMoney()); + try { + addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback); + } catch (UserMoneyDebtException e) { + throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父"); + } + } + } + } + continue; + } + + UserMoneyDetail userMoneyDetail = null; // 鏂扮増璧勯噾璁板綍 try { - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(uid, weiQuanDrawBack, - drawBackMoney); - userMoneyDetail.setId(accountDetails.getId()); - userMoneyDetailMapper.insert(userMoneyDetail); + userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(uid, weiQuanDrawBack, drawBackMoney); } catch (UserMoneyDetailException e) { try { LogHelper.errorDetailInfo(e); @@ -310,10 +448,11 @@ e1.printStackTrace(); } } + userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); + userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, - userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney); + userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); } - } @Transactional @@ -326,116 +465,107 @@ if (list == null || list.size() == 0) return; // 鏌ヨ璁㈠崟搴� - List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId); - // 璁$畻娣樺疂鑱旂洘杩旂粰骞冲彴鐨勮祫閲� - BigDecimal sumFee = new BigDecimal("0"); - for (TaoBaoOrder order : orderList) - if (order.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) - sumFee = sumFee.add(order.geteIncome()); - // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� - // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) - List<CommonOrderVO> typeList = new ArrayList<>(); - CommonOrderVO cv = new CommonOrderVO(); - cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO); - cv.setOrderNo(orderId); - typeList.add(cv); - - List<CommonOrderVO> commonOrderList = commonOrderMapper.listByOrderNoAndType(typeList); - List<HongBaoV2> mainHongBaoList = new ArrayList<>(); - if (commonOrderList != null) - for (CommonOrderVO vo : commonOrderList) { - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId()); - mainHongBaoList.add(hongBaoOrder.getHongBaoV2()); + for (TaoBaoWeiQuanOrder weiQuanOrder : list) { + TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId()); + BigDecimal wqMoney = weiQuanOrder.getMoney(); + if (taoBaoOrder == null) + throw new TaoBaoWeiQuanException(1, "鏉ユ簮浜ゆ槗ID鏈夎"); + BigDecimal settleMent = new BigDecimal("0"); + if (taoBaoOrder.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) { + settleMent = settleMent.add(taoBaoOrder.getSettlement()); } - if (mainHongBaoList == null || mainHongBaoList.size() == 0) - return; - // 涓荤敤鎴稩D - Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); + // 鏌ヨ涓嬬骇瀛愮敤鎴� + CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + weiQuanOrder.getOrderItemId()); + if (commonOrder == null) + throw new TaoBaoWeiQuanException(2, "璁㈠崟鏈夎"); - if (mainHongBaoList != null) - for (HongBaoV2 hongBao : mainHongBaoList) { - if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) - continue; - // 杩斿埄绾㈠寘涓嶈鍏� - if (hongBao.getType() != HongBaoV2.TYPE_ZIGOU) { - // 绱涓荤孩鍖呯殑閲戦 - if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) { - fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney()); - } else - fanMoneyMap.put(hongBao.getUserInfo().getId(), - fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney())); - } - // 绱瀛愮孩鍖呯殑閲戦 - List<HongBaoV2> childHongBaoList = hongBaoV2Mapper.listChildrenById(hongBao.getId()); - if (childHongBaoList != null) - for (HongBaoV2 child : childHongBaoList) { - if (child.getState() == HongBaoV2.STATE_SHIXIAO) + HongBaoOrder hongbaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + + if (hongbaoOrder == null || hongbaoOrder.getHongBaoV2() == null) + throw new TaoBaoWeiQuanException(3, "绾㈠寘鏈夎"); + + List<HongBaoV2> childList = hongBaoV2Mapper.listChildrenById(hongbaoOrder.getHongBaoV2().getId()); + + if (childList != null) + for (HongBaoV2 child : childList) { + Long uid = child.getUserInfo().getId(); + if (child.getState() != HongBaoV2.STATE_YILINGQU) + continue; + TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper + .selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), child.getUserInfo().getId()); + if (weiQuanDrawBack != null) + continue; + BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, child.getMoney()); + weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); + weiQuanDrawBack.setCreateTime(new Date()); + weiQuanDrawBack.setDrawBackMoney(drawBackMoney); + weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId()); + weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); + weiQuanDrawBack.setUser(child.getUserInfo()); + taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 鍔犲叆杩旇繕璁板綍 + + // 濡傛灉璧勯噾澶т簬0鎵嶆墸闄� + + if (drawBackMoney != null && drawBackMoney.compareTo(new BigDecimal(0)) > 0) { + + // 鍒ゆ柇璧勯噾鏄惁瓒冲鎵f + UserInfo user = userInfoMapper.selectByPKey(uid); + if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻 + { + try { + addDebt(uid, child.getId(), drawBackMoney); + } catch (UserMoneyDebtException e) { + throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父"); + } continue; - if (fanMoneyMap.get(child.getUserInfo().getId()) == null) { - fanMoneyMap.put(child.getUserInfo().getId(), child.getMoney()); - } else - fanMoneyMap.put(child.getUserInfo().getId(), - fanMoneyMap.get(child.getUserInfo().getId()).add(child.getMoney())); + } + + UserMoneyDetail userMoneyDetail = null; + // 鏂扮増璧勯噾璁板綍 + try { + userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid, weiQuanDrawBack, + drawBackMoney); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); + + // 鏂扮増閫氱煡 + userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, + drawBackMoney, userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); } - } - - // 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚� - Iterator<Long> its = fanMoneyMap.keySet().iterator(); - while (its.hasNext()) { - Long uid = its.next(); - BigDecimal userGetMoney = fanMoneyMap.get(uid); - BigDecimal fanMoney = new BigDecimal("0"); - // 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾 - TaoBaoWeiQuanDrawBack weiQuanDrawBack = null; - for (TaoBaoWeiQuanOrder weiQuanOrder : list) { - weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), - uid); - if (weiQuanDrawBack != null) - continue; - // 閫�娆剧殑璧勯噾 - fanMoney = fanMoney.add(weiQuanOrder.getFanMoney()); - // 鎻掑叆璁板綍 - weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); - weiQuanDrawBack.setCreateTime(new Date()); - // TODO 鏆傛椂璁句负0 - weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0)); - weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId()); - weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); - weiQuanDrawBack.setUser(new UserInfo(uid)); - taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack); - } - - if (fanMoney.compareTo(new BigDecimal("0")) <= 0) - continue; - - // 閫�娆鹃噾棰� - BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee); - userInfoMapper.subHongBaoByUid(uid, drawBackMoney); - // 娣诲姞璧勯噾璁板綍 - AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney, - AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid)); - accountDetailsMapper.insertSelective(accountDetails); - - // 鏂扮増璧勯噾璁板綍 - try { - UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid, weiQuanDrawBack, - drawBackMoney); - userMoneyDetail.setId(accountDetails.getId()); - userMoneyDetailMapper.insert(userMoneyDetail); - } catch (UserMoneyDetailException e) { - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); } - } - - // - - userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney); } + } + @Override + public TaoBaoWeiQuanDrawBack selectByOrderItemId(String orderItemId) { + List<TaoBaoWeiQuanDrawBack> list = taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId); + if (list != null && list.size() > 0) + return list.get(0); + else + return null; + } + + @Override + public TaoBaoWeiQuanDrawBack selectByHongBaoId(Long hbId) { + Long uid = null; + HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(hbId); + uid = hb.getUserInfo().getId(); + if (hb.getParent() != null) + hb = hb.getParent(); + HongBaoOrder hbo = hongBaoOrderMapper.selectByHongBaoId(hb.getId()); + if (hbo != null && hbo.getCommonOrder() != null) { + return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(hbo.getCommonOrder().getTradeId(), uid); + } + return null; } } -- Gitblit v1.8.0