From dd5b15229cb15459fa7c31ccea77dac28cbfafbd Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 13 四月 2020 10:04:20 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java | 301 ++++++++++++++++++++++++++----------------------- 1 files changed, 158 insertions(+), 143 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java index 4fbf085..e6d0237 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java @@ -22,32 +22,28 @@ import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanDrawBackMapper; import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.bus.user.UserInfo; -import com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt; 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.order.InviteOrderSubsidy; 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.money.InviteOrderSubsidyDebtException; import com.yeshi.fanli.exception.money.UserMoneyDebtException; import com.yeshi.fanli.exception.money.UserMoneyDetailException; import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService; import com.yeshi.fanli.service.inter.money.UserMoneyDebtService; +import com.yeshi.fanli.service.inter.money.UserMoneyDetailService; import com.yeshi.fanli.service.inter.money.UserMoneyService; import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService; import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService; -import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService; import com.yeshi.fanli.service.inter.order.tb.TaoBaoWeiQuanOrderService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.factory.UserMoneyDetailFactory; -import com.yeshi.fanli.vo.order.CommonOrderVO; @Service public class TaoBaoWeiQuanDrawBackServiceImpl implements TaoBaoWeiQuanDrawBackService { @@ -85,10 +81,10 @@ private UserMoneyService userMoneyService; @Resource - private InviteOrderSubsidyService inviteOrderSubsidyService; + private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService; @Resource - private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService; + private UserMoneyDetailService userMoneyDetailService; @Override public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) { @@ -96,7 +92,7 @@ taoBaoWeiQuanDrawBack.getUser().getId()); } - @Transactional + @Transactional(rollbackFor = Exception.class) private void addDebt(Long uid, Long hbId, BigDecimal money) throws UserMoneyDebtException { UserMoneyDebt debt = new UserMoneyDebt(); debt.setBeiZhu(null); @@ -124,47 +120,21 @@ return money; } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override - public void doWeiQuanFanli(String orderId) throws TaoBaoWeiQuanException { + public Map<Long, BigDecimal> doWeiQuanFanli(String orderId, boolean subMoneySync) throws TaoBaoWeiQuanException { if (StringUtil.isNullOrEmpty(orderId)) throw new TaoBaoWeiQuanException(1, "璁㈠崟鍙蜂负绌哄��"); // 鏌ヨ鏄惁涓虹淮鏉冭鍗� List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId); if (list == null || list.size() == 0) - return; - // 鏌ヨ杩樻湭鎵f鐨勪富绾㈠寘 - List<HongBaoV2> mainHongBaoList = new ArrayList<>(); - for (TaoBaoWeiQuanOrder weiQuanOrder : list) { - List<CommonOrder> orderList = commonOrderMapper.listBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, - weiQuanOrder.getOrderItemId()); - if (orderList != null && orderList.size() > 0) - for (CommonOrder commonOrder : orderList) { - // 淇敼璁㈠崟鐘舵�佷负缁存潈 - CommonOrder co = new CommonOrder(commonOrder.getId()); - co.setState(CommonOrder.STATE_WQ); - co.setUpdateTime(new Date()); - commonOrderMapper.updateByPrimaryKeySelective(co); - - HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); - 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()); - } - - } - } + return null; + List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId); if (mainHongBaoList == null || mainHongBaoList.size() == 0) - return; + return null; for (int i = 0; i < mainHongBaoList.size(); i++) { - //閿佽锛岄槻姝㈤噸澶� 鎿嶄綔 + // 閿佽锛岄槻姝㈤噸澶� 鎿嶄綔 HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(mainHongBaoList.get(i).getId()); mainHongBaoList.set(i, hb); // 鍙鐞嗚繑鍒╄鍗� @@ -175,7 +145,7 @@ } if (mainHongBaoList == null || mainHongBaoList.size() == 0) - return; + return null; // 涓荤敤鎴稩D Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); @@ -194,6 +164,7 @@ // 璁$畻姣忎釜鐢ㄦ埛鐨勮繑鍒╂瘮渚� Iterator<Long> its = fanMoneyMap.keySet().iterator(); + Map<Long, BigDecimal> userSubMoneyMap = new HashMap<>(); while (its.hasNext()) { Long uid = its.next(); BigDecimal userGetMoney = fanMoneyMap.get(uid); @@ -248,93 +219,142 @@ // 閫�娆鹃噾棰� BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); - - // 璁$畻璧勯噾鏄惁鍏呰冻 - UserInfo user = userInfoMapper.selectByPrimaryKey(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, "璧勯噾鍊熻捶寮傚父"); + userSubMoneyMap.put(uid, drawBackMoney); + if (subMoneySync) { + // 璁$畻璧勯噾鏄惁鍏呰冻 + UserInfo user = userInfoMapper.selectByPrimaryKey(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; } - continue; - } - UserMoneyDetail userMoneyDetail = null; - // 鏂扮増璧勯噾璁板綍 - try { - userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney); - } catch (UserMoneyDetailException e) { + UserMoneyDetail userMoneyDetail = null; + // 鏂扮増璧勯噾璁板綍 try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); + userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + if (userMoneyDetail == null) + throw new TaoBaoWeiQuanException(110, "璧勯噾璁板綍鐢熸垚澶辫触"); + userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); + + // 鏂扮増閫氱煡 + List<CommonOrder> orderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO, + orderId); + int goodsCount = 0; + for (CommonOrder co : orderList) { + if (co.getState() != CommonOrder.STATE_SX) + goodsCount += co.getCount(); + } + + BigDecimal fanliMoney = new BigDecimal(0); + List<HongBaoOrder> hongBaoOrderList = hongBaoOrderMapper.listDetailByOrderIdAndSourceType(orderId, + Constant.SOURCE_TYPE_TAOBAO); + for (HongBaoOrder hb : hongBaoOrderList) { + fanliMoney = fanliMoney.add(hb.getHongBaoV2().getMoney()); + } + + userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, + drawBackMoney, fanliMoney, goodsCount, orderList.get(0).getThirdCreateTime()); + + } else {// 璁板綍璧勯噾璁板綍锛屼絾鏄笉鏄剧ず缁欑敤鎴� + + UserMoneyDetail userMoneyDetail = null; + // 鏂扮増璧勯噾璁板綍 + try { + userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + if (userMoneyDetail == null) + throw new TaoBaoWeiQuanException(110, "璧勯噾璁板綍鐢熸垚澶辫触"); + userMoneyDetail.setShow(false); + try { + userMoneyDetailService.addUserMoneyDetail(userMoneyDetail); + } catch (UserMoneyDetailException e) { + throw new TaoBaoWeiQuanException(111, "鎻掑叆璁板綍鐢熸垚澶辫触"); } } - userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); - - // 鏂扮増閫氱煡 - userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, - userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); } + return userSubMoneyMap; } - @Transactional + private List<HongBaoV2> getWeiQuanMainHongBao(List<TaoBaoWeiQuanOrder> list, String orderId) { + // 鏌ヨ鏄惁涓虹淮鏉冭鍗� + if (list == null || list.size() == 0) + return null; + // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� + // 鏌ヨ杩樻湭鎵f鐨勪富绾㈠寘 + List<HongBaoV2> mainHongBaoList = new ArrayList<>(); + for (TaoBaoWeiQuanOrder weiQuanOrder : list) { + List<CommonOrder> orderList = commonOrderMapper.listBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, + weiQuanOrder.getOrderItemId()); + if (orderList != null && orderList.size() > 0) + for (CommonOrder commonOrder : orderList) { + // 淇敼璁㈠崟鐘舵�佷负缁存潈 + CommonOrder co = new CommonOrder(commonOrder.getId()); + co.setState(CommonOrder.STATE_WQ); + co.setUpdateTime(new Date()); + commonOrderMapper.updateByPrimaryKeySelective(co); + + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + 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()); + } + } + } + return mainHongBaoList; + } + + @Transactional(rollbackFor = Exception.class) @Override public void doWeiQuanShare(String orderId) throws TaoBaoWeiQuanException { if (StringUtil.isNullOrEmpty(orderId)) throw new TaoBaoWeiQuanException(1, "璁㈠崟鍙蜂负绌哄��"); - // 鏌ヨ鏄惁涓虹淮鏉冭鍗� + List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId); if (list == null || list.size() == 0) return; - // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� - // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) - 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.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()); - 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()); - } - } + List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId); if (mainHongBaoList == null || mainHongBaoList.size() == 0) return; @@ -458,13 +478,29 @@ } } userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); - userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, - userInfoMapper.selectAvailableByPrimaryKey(uid).getMyHongBao()); + // 鏂扮増閫氱煡 + List<CommonOrder> orderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO, + orderId); + int goodsCount = 0; + for (CommonOrder co : orderList) { + if (co.getState() != CommonOrder.STATE_SX) + goodsCount += co.getCount(); + } + + BigDecimal fanliMoney = new BigDecimal(0); + List<HongBaoOrder> hongBaoOrderList = hongBaoOrderMapper.listDetailByOrderIdAndSourceType(orderId, + Constant.SOURCE_TYPE_TAOBAO); + for (HongBaoOrder hb : hongBaoOrderList) { + fanliMoney = fanliMoney.add(hb.getHongBaoV2().getMoney()); + } + + userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, + fanliMoney, goodsCount, orderList.get(0).getThirdCreateTime()); } } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override public void doWeiQuanInvite(String orderId) throws TaoBaoWeiQuanException { if (StringUtil.isNullOrEmpty(orderId)) @@ -514,10 +550,6 @@ weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); weiQuanDrawBack.setUser(child.getUserInfo()); taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 鍔犲叆杩旇繕璁板綍 - - // 鍔犲叆閭�璇疯ˉ璐磋繑杩樿褰� - doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney); - // 濡傛灉璧勯噾澶т簬0鎵嶆墸闄� if (drawBackMoney != null && drawBackMoney.compareTo(new BigDecimal(0)) > 0) { @@ -557,33 +589,6 @@ } } - /** - * 閭�璇疯鍗曡ˉ璐寸淮鏉冨鐞� - * - * @param orderId - * @param sourceType - */ - private void doInviteOrderSubsidy(String orderId, int sourceType, Long uid, BigDecimal settleMent, - BigDecimal weiQuanMoney) throws TaoBaoWeiQuanException { - InviteOrderSubsidy subSidy = inviteOrderSubsidyService.getByOrderNoAndType(uid, orderId, sourceType); - if (subSidy != null)// 娣诲姞鍊熻捶鍏崇郴 - { - BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, weiQuanMoney, subSidy.getOriginalMoney()); - if (drawBackMoney.compareTo(new BigDecimal(0)) <= 0) - return; - InviteOrderSubsidyDebt debt = new InviteOrderSubsidyDebt(); - debt.setBeiZhu("璁㈠崟缁存潈:" + orderId + "-" + sourceType); - debt.setOriginMoney(drawBackMoney); - debt.setUid(uid); - debt.setCreateTime(new Date()); - try { - inviteOrderSubsidyDebtService.addDebt(debt); - } catch (InviteOrderSubsidyDebtException e) { - throw new TaoBaoWeiQuanException(101, "閭�璇疯鍗曡ˉ璐村紓甯�"); - } - } - } - @Override public TaoBaoWeiQuanDrawBack selectByOrderItemId(String orderItemId) { List<TaoBaoWeiQuanDrawBack> list = taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId); @@ -594,6 +599,16 @@ } @Override + public List<TaoBaoWeiQuanDrawBack> getByOrderItemId(String orderItemId) { + return taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId); + } + + @Override + public TaoBaoWeiQuanDrawBack selectByOrderItemIdAndUid(String orderItemId, Long uid) { + return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(orderItemId, uid); + } + + @Override public TaoBaoWeiQuanDrawBack selectByHongBaoId(Long hbId) { Long uid = null; HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(hbId); -- Gitblit v1.8.0