From 88b54772dbcf5ecab1e2316e4e4626ac901b8908 Mon Sep 17 00:00:00 2001 From: yujian <yujian> Date: 星期二, 22 一月 2019 15:58:24 +0800 Subject: [PATCH] 邀请码添加返回状态 --- fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 259 insertions(+), 20 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 244b98c..a4e52e1 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 @@ -1,6 +1,7 @@ package com.yeshi.fanli.service.impl.taobao; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -13,31 +14,40 @@ 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.hongbao.HongBaoMapper; +import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper; +import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper; +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.HongBao; +import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.bus.user.UserInfo; +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.UserMoneyDetailException; +import com.yeshi.fanli.log.LogHelper; +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.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; @Service public class TaoBaoWeiQuanDrawBackServiceImpl implements TaoBaoWeiQuanDrawBackService { @Resource private TaoBaoWeiQuanDrawBackMapper taoBaoWeiQuanDrawBackMapper; - - @Resource - private HongBaoMapper hongBaoMapper; @Resource private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService; @@ -49,10 +59,25 @@ private UserInfoMapper userInfoMapper; @Resource + private UserMoneyDetailMapper userMoneyDetailMapper; + + @Resource private AccountDetailsMapper accountDetailsMapper; @Resource private UserNotificationService userNotificationService; + + @Resource + private CommonOrderMapper commonOrderMapper; + + @Resource + private HongBaoV2Mapper hongBaoV2Mapper; + + @Resource + private HongBaoOrderMapper hongBaoOrderMapper; + + @Resource + private UserMoneyMsgNotificationService userMoneyMsgNotificationService; @Override public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) { @@ -78,12 +103,32 @@ sumFee = sumFee.add(order.geteIncome()); // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) - List<HongBao> mainHongBaoList = hongBaoMapper.selectByOrderIdWithoutChild(orderId); + 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()); + 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() != HongBao.TYPE_TAOBAO) { + if (hb.getType() != HongBaoV2.TYPE_ZIGOU) { mainHongBaoList.remove(i); i--; } @@ -96,8 +141,8 @@ Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); if (mainHongBaoList != null) - for (HongBao hongBao : mainHongBaoList) { - if (hongBao.getState() == HongBao.STATE_SHIXIAO) + for (HongBaoV2 hongBao : mainHongBaoList) { + if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) continue; // 绱涓荤孩鍖呯殑閲戦 if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) { @@ -114,9 +159,10 @@ BigDecimal userGetMoney = fanMoneyMap.get(uid); BigDecimal fanMoney = new BigDecimal("0"); // 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾 + TaoBaoWeiQuanDrawBack weiQuanDrawBack = null; for (TaoBaoWeiQuanOrder weiQuanOrder : list) { - TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper - .selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), uid); + weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), + uid); if (weiQuanDrawBack != null) continue; // 閫�娆剧殑璧勯噾 @@ -142,10 +188,29 @@ AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney, AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid)); accountDetailsMapper.insertSelective(accountDetails); + // 鏂扮増璧勯噾璁板綍 + try { + UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, + drawBackMoney); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + // 鏂扮増閫氱煡 + userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, drawBackMoney, + userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); + userNotificationService.weiQuanFanli(uid, orderId, drawBackMoney); } } + @Transactional @Override public void doWeiQuanShare(String orderId) throws TaoBaoWeiQuanException { if (StringUtil.isNullOrEmpty(orderId)) @@ -163,7 +228,27 @@ sumFee = sumFee.add(order.geteIncome()); // 鑾峰彇鍜岃璁㈠崟鍙锋湁鍏宠仈鐨勭敤鎴� // 鑾峰彇涓荤孩鍖�(鍚屼竴涓鍗曞彿鐨勫崟鍙細瀵瑰簲鍚屼竴涓敤鎴�) - List<HongBao> mainHongBaoList = hongBaoMapper.selectByOrderIdWithoutChild(orderId); + + 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()); + mainHongBaoList.add(hongBaoOrder.getHongBaoV2()); + } + if (mainHongBaoList == null || mainHongBaoList.size() == 0) return; @@ -171,11 +256,13 @@ Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); if (mainHongBaoList != null) - for (HongBao hongBao : mainHongBaoList) { - if (hongBao.getState() == HongBao.STATE_SHIXIAO) + for (HongBaoV2 hongBao : mainHongBaoList) { + hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId()); + if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) continue; + // 杩斿埄绾㈠寘涓嶈鍏� - if (hongBao.getType() != HongBao.TYPE_TAOBAO) { + if (hongBao.getType() != HongBaoV2.TYPE_ZIGOU) { // 绱涓荤孩鍖呯殑閲戦 if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) { fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney()); @@ -184,10 +271,10 @@ fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney())); } // 绱瀛愮孩鍖呯殑閲戦 - List<HongBao> childHongBaoList = hongBaoMapper.selectChildHongBaoByPid(hongBao.getId()); + List<HongBaoV2> childHongBaoList = hongBaoV2Mapper.listChildrenById(hongBao.getId()); if (childHongBaoList != null) - for (HongBao child : childHongBaoList) { - if (child.getState() == HongBao.STATE_SHIXIAO) + 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()); @@ -204,9 +291,10 @@ BigDecimal userGetMoney = fanMoneyMap.get(uid); BigDecimal fanMoney = new BigDecimal("0"); // 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾 + TaoBaoWeiQuanDrawBack weiQuanDrawBack = null; for (TaoBaoWeiQuanOrder weiQuanOrder : list) { - TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper - .selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), uid); + weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), + uid); if (weiQuanDrawBack != null) continue; // 閫�娆剧殑璧勯噾 @@ -232,6 +320,157 @@ AccountDetails accountDetails = AccountDetailsFactory.create("-" + drawBackMoney, AccountDetailsFactory.SHARE_GOODS_DRAWBACK, null, null, new UserInfo(uid)); accountDetailsMapper.insertSelective(accountDetails); + // 鏂扮増璧勯噾璁板綍 + try { + UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(uid, weiQuanDrawBack, + drawBackMoney); + userMoneyDetail.setId(accountDetails.getId()); + userMoneyDetailMapper.insert(userMoneyDetail); + } catch (UserMoneyDetailException e) { + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, drawBackMoney, + userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); + + userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney); + } + + } + + @Transactional + @Override + public void doWeiQuanInvite(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<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.listOrderGoodsInfo(typeList); + List<HongBaoV2> mainHongBaoList = new ArrayList<>(); + if (commonOrderList != null) + for (CommonOrderVO vo : commonOrderList) { + CommonOrder co = commonOrderMapper.selectByPrimaryKey(vo.getId()); + if (co.getState() != CommonOrder.STATE_WQ) { + 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 (mainHongBaoList == null || mainHongBaoList.size() == 0) + return; + + // 涓荤敤鎴稩D + Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); + + if (mainHongBaoList != null) + for (HongBaoV2 hongBao : mainHongBaoList) { + HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId()); + hongBao = hb; + + 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) + 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"); + // 缁熻鐢ㄦ埛鍦ㄨ繖涓崟涓渶瑕佹墸闄ょ殑璧勯噾 + 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(); + } + } + + // 鏂扮増閫氱煡 + userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId, drawBackMoney, + userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney); } -- Gitblit v1.8.0