From 5046ecde3cd849511a337e25e13af7df7f1894bc Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 31 七月 2019 19:22:18 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java | 217 +++++++++++++++++++++++++++++------------------------- 1 files changed, 117 insertions(+), 100 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 4884b48..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 @@ -99,6 +99,21 @@ 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 @Override public void doWeiQuanFanli(String orderId) throws TaoBaoWeiQuanException { @@ -108,19 +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()); - if (order.getSubsidy() != null) - sumFee = sumFee.add(order.getSubsidy()); - } - if (new BigDecimal(0).compareTo(sumFee) == 0) - throw new TaoBaoWeiQuanException(TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER, "闇�瑕佹洿鏂拌鍗�"); - // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) List<CommonOrderVO> typeList = new ArrayList<>(); @@ -140,7 +142,16 @@ 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; @@ -162,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) { @@ -177,28 +188,48 @@ 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)); newWeiQuanDrawBackList.add(weiQuanDrawBack); } - if (fanMoney.compareTo(new BigDecimal("0")) <= 0) + if (wqMoney.compareTo(new BigDecimal("0")) <= 0) continue; // 鎻掑叆璁板綍 @@ -207,30 +238,25 @@ } // 閫�娆鹃噾棰� - BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee); - if (drawBackMoney.compareTo(userGetMoney) > 0) - drawBackMoney = userGetMoney;// 閫�娆鹃噾棰濅笉鑳芥瘮鑾峰緱鐨勯噾棰濆ぇ + BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); + // 璁$畻璧勯噾鏄惁鍏呰冻 UserInfo user = userInfoMapper.selectByPKey(uid); if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻 { // 娣诲姞鍊哄姟 - for (TaoBaoWeiQuanOrder weiQuanOrder : list) { - TaoBaoOrder taoBaoOrder = taoBaoOrderMapper - .selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId()); + for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) { + TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId()); if (taoBaoOrder != null) { - BigDecimal totalFee = taoBaoOrder.geteIncome(); - if (taoBaoOrder.getSubsidy() != null) - totalFee = totalFee.add(taoBaoOrder.getSubsidy()); - // + TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService + .selectByTradeId(drawBack.getOrderItemId()); CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, - weiQuanOrder.getOrderItemId()); + drawBack.getOrderItemId()); if (co != null) { HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId()); if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) { - BigDecimal drawback = MoneyBigDecimalUtil.div( - hongBaoOrder.getHongBaoV2().getMoney().multiply(weiQuanOrder.getFanMoney()), - totalFee); + BigDecimal drawback = computeDrawBackMoney(taoBaoOrder.getSettlement(), + weiQuanOrder.getMoney(), hongBaoOrder.getHongBaoV2().getMoney()); try { addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback); } catch (UserMoneyDebtException e) { @@ -257,7 +283,7 @@ userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId,Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, + userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, userInfoMapper.selectByPKey(uid).getMyHongBao()); } } @@ -271,19 +297,8 @@ 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()); - if (order.getSubsidy() != null) - sumFee = sumFee.add(order.getSubsidy()); - } // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) - List<CommonOrderVO> typeList = new ArrayList<>(); CommonOrderVO cv = new CommonOrderVO(); cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO); @@ -299,9 +314,17 @@ 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) @@ -311,9 +334,9 @@ 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; // 鍙鍏ュ垎浜禋鐨勭孩鍖� @@ -327,12 +350,13 @@ } } - // 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚� 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; @@ -342,24 +366,44 @@ 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)); 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); + BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); if (drawBackMoney.compareTo(userGetMoney) > 0) drawBackMoney = userGetMoney; @@ -370,46 +414,22 @@ if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 璧勯噾涓嶈冻 { // 娣诲姞鍊哄姟 - for (TaoBaoWeiQuanOrder weiQuanOrder : list) { - TaoBaoOrder taoBaoOrder = taoBaoOrderMapper - .selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId()); + for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) { + TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId()); if (taoBaoOrder != null) { - BigDecimal totalFee = taoBaoOrder.geteIncome(); - if (taoBaoOrder.getSubsidy() != null) - totalFee = totalFee.add(taoBaoOrder.getSubsidy()); - // + 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 = MoneyBigDecimalUtil.div( - hongBaoOrder.getHongBaoV2().getMoney().multiply(weiQuanOrder.getFanMoney()), - totalFee); + BigDecimal drawback = computeDrawBackMoney(settleMentMoney, weiQuanOrder.getMoney(), + hongBaoOrder.getHongBaoV2().getMoney()); try { addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback); } catch (UserMoneyDebtException e) { throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父"); - } - - if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) { - List<HongBaoV2> hongBaoList = hongBaoV2Mapper - .listChildrenById(hongBaoOrder.getHongBaoV2().getId()); - for (int i = 0; i < hongBaoList.size(); i++) { - if (hongBaoList.get(i).getUserInfo().getId().longValue() != uid) { - hongBaoList.remove(i); - i--; - } - } - - for (HongBaoV2 hb : hongBaoList) { - drawback = MoneyBigDecimalUtil - .div(hb.getMoney().multiply(weiQuanOrder.getFanMoney()), totalFee); - try { - addDebt(hb.getUserInfo().getId(), hb.getId(), drawback); - } catch (UserMoneyDebtException e) { - throw new TaoBaoWeiQuanException(101, "璧勯噾鍊熻捶寮傚父"); - } - } } } } @@ -429,7 +449,8 @@ } } userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); - userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO,drawBackMoney, + userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, + userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); } } @@ -446,14 +467,12 @@ // 鏌ヨ璁㈠崟搴� for (TaoBaoWeiQuanOrder weiQuanOrder : list) { TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId()); - BigDecimal fanMoney = weiQuanOrder.getFanMoney(); + BigDecimal wqMoney = weiQuanOrder.getMoney(); if (taoBaoOrder == null) throw new TaoBaoWeiQuanException(1, "鏉ユ簮浜ゆ槗ID鏈夎"); - BigDecimal sumFee = new BigDecimal("0"); + BigDecimal settleMent = new BigDecimal("0"); if (taoBaoOrder.getOrderState().equalsIgnoreCase("璁㈠崟缁撶畻")) { - sumFee = sumFee.add(taoBaoOrder.geteIncome()); - if (taoBaoOrder.getSubsidy() != null) - sumFee = sumFee.add(taoBaoOrder.getSubsidy()); + settleMent = settleMent.add(taoBaoOrder.getSettlement()); } // 鏌ヨ涓嬬骇瀛愮敤鎴� @@ -478,9 +497,7 @@ .selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), child.getUserInfo().getId()); if (weiQuanDrawBack != null) continue; - BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(child.getMoney().multiply(fanMoney), sumFee); - if (drawBackMoney.compareTo(child.getMoney()) > 0) - drawBackMoney = child.getMoney(); + BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, child.getMoney()); weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); weiQuanDrawBack.setCreateTime(new Date()); weiQuanDrawBack.setDrawBackMoney(drawBackMoney); @@ -521,9 +538,9 @@ userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId,Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, - userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); - } + userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, + drawBackMoney, userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); + } } } } -- Gitblit v1.8.0