| | |
| | | |
| | | @Service |
| | | public class TaoBaoWeiQuanDrawBackServiceImpl implements TaoBaoWeiQuanDrawBackService { |
| | | @Resource |
| | | private TaoBaoWeiQuanDrawBackMapper taoBaoWeiQuanDrawBackMapper; |
| | | @Resource |
| | | private TaoBaoWeiQuanDrawBackMapper taoBaoWeiQuanDrawBackMapper; |
| | | |
| | | @Resource |
| | | private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService; |
| | | @Resource |
| | | private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService; |
| | | |
| | | @Resource |
| | | private TaoBaoOrderMapper taoBaoOrderMapper; |
| | | @Resource |
| | | private TaoBaoOrderMapper taoBaoOrderMapper; |
| | | |
| | | @Resource |
| | | private UserInfoMapper userInfoMapper; |
| | | @Resource |
| | | private UserInfoMapper userInfoMapper; |
| | | |
| | | @Resource |
| | | private UserMoneyDetailMapper userMoneyDetailMapper; |
| | | @Resource |
| | | private UserMoneyDetailMapper userMoneyDetailMapper; |
| | | |
| | | @Resource |
| | | private CommonOrderMapper commonOrderMapper; |
| | | @Resource |
| | | private CommonOrderMapper commonOrderMapper; |
| | | |
| | | @Resource |
| | | private HongBaoV2Mapper hongBaoV2Mapper; |
| | | @Resource |
| | | private HongBaoV2Mapper hongBaoV2Mapper; |
| | | |
| | | @Resource |
| | | private HongBaoOrderMapper hongBaoOrderMapper; |
| | | @Resource |
| | | private HongBaoOrderMapper hongBaoOrderMapper; |
| | | |
| | | @Resource |
| | | private UserMoneyMsgNotificationService userMoneyMsgNotificationService; |
| | | @Resource |
| | | private UserMoneyMsgNotificationService userMoneyMsgNotificationService; |
| | | |
| | | @Resource |
| | | private UserMoneyDebtService userMoneyDebtService; |
| | | @Resource |
| | | private UserMoneyDebtService userMoneyDebtService; |
| | | |
| | | @Resource |
| | | private UserMoneyService userMoneyService; |
| | | @Resource |
| | | private UserMoneyService userMoneyService; |
| | | |
| | | |
| | | @Resource |
| | | private UserMoneyDetailService userMoneyDetailService; |
| | | @Resource |
| | | private UserMoneyDetailService userMoneyDetailService; |
| | | |
| | | @Override |
| | | public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) { |
| | | taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(taoBaoWeiQuanDrawBack.getOrderItemId(), |
| | | taoBaoWeiQuanDrawBack.getUser().getId()); |
| | | } |
| | | @Override |
| | | public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) { |
| | | taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(taoBaoWeiQuanDrawBack.getOrderItemId(), |
| | | taoBaoWeiQuanDrawBack.getUser().getId()); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | 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); |
| | | } |
| | | @Transactional(rollbackFor = Exception.class) |
| | | 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; |
| | | } |
| | | /** |
| | | * 计算退款金额 |
| | | * |
| | | * @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(rollbackFor = Exception.class) |
| | | @Override |
| | | 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 null; |
| | | List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId); |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | 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 null; |
| | | List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId); |
| | | |
| | | if (mainHongBaoList == null || mainHongBaoList.size() == 0) |
| | | return null; |
| | | for (int i = 0; i < mainHongBaoList.size(); i++) { |
| | | // 锁行,防止重复 操作 |
| | | HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(mainHongBaoList.get(i).getId()); |
| | | mainHongBaoList.set(i, hb); |
| | | // 只处理返利订单 |
| | | if (hb.getType() != HongBaoV2.TYPE_ZIGOU) { |
| | | mainHongBaoList.remove(i); |
| | | i--; |
| | | } |
| | | } |
| | | if (mainHongBaoList == null || mainHongBaoList.size() == 0) |
| | | return null; |
| | | for (int i = 0; i < mainHongBaoList.size(); i++) { |
| | | // 锁行,防止重复 操作 |
| | | HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(mainHongBaoList.get(i).getId()); |
| | | mainHongBaoList.set(i, hb); |
| | | // 只处理返利订单 |
| | | if (hb.getType() != HongBaoV2.TYPE_ZIGOU) { |
| | | mainHongBaoList.remove(i); |
| | | i--; |
| | | } |
| | | } |
| | | |
| | | if (mainHongBaoList == null || mainHongBaoList.size() == 0) |
| | | return null; |
| | | if (mainHongBaoList == null || mainHongBaoList.size() == 0) |
| | | return null; |
| | | |
| | | // 主用户ID |
| | | Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); |
| | | // 主用户ID |
| | | Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); |
| | | |
| | | if (mainHongBaoList != null) |
| | | for (HongBaoV2 hongBao : mainHongBaoList) { |
| | | if (hongBao.getState() != HongBaoV2.STATE_YILINGQU) |
| | | continue; |
| | | // 累计主红包的金额 |
| | | 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())); |
| | | } |
| | | if (mainHongBaoList != null) |
| | | for (HongBaoV2 hongBao : mainHongBaoList) { |
| | | if (hongBao.getState() != HongBaoV2.STATE_YILINGQU) |
| | | continue; |
| | | // 累计主红包的金额 |
| | | 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())); |
| | | } |
| | | |
| | | // 计算每个用户的返利比例 |
| | | Iterator<Long> its = fanMoneyMap.keySet().iterator(); |
| | | Map<Long, BigDecimal> userSubMoneyMap = new HashMap<>(); |
| | | while (its.hasNext()) { |
| | | Long uid = its.next(); |
| | | BigDecimal userGetMoney = fanMoneyMap.get(uid); |
| | | 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, "未找到子订单相关数据"); |
| | | // 计算每个用户的返利比例 |
| | | Iterator<Long> its = fanMoneyMap.keySet().iterator(); |
| | | Map<Long, BigDecimal> userSubMoneyMap = new HashMap<>(); |
| | | while (its.hasNext()) { |
| | | Long uid = its.next(); |
| | | BigDecimal userGetMoney = fanMoneyMap.get(uid); |
| | | 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) { |
| | | weiQuanDrawBack = null; |
| | | continue; |
| | | } |
| | | // 计算结算金额 |
| | | TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId()); |
| | | if (taoBaoOrder == null) |
| | | throw new TaoBaoWeiQuanException(101, "未找到子订单相关数据"); |
| | | |
| | | if (taoBaoOrder.getSettlement() == null) |
| | | throw new TaoBaoWeiQuanException(102, "淘宝结算金额为空"); |
| | | if (taoBaoOrder.getSettlement() == null) |
| | | throw new TaoBaoWeiQuanException(102, "淘宝结算金额为空"); |
| | | |
| | | settleMent = settleMent.add(taoBaoOrder.getSettlement()); |
| | | settleMent = settleMent.add(taoBaoOrder.getSettlement()); |
| | | |
| | | // 退款的资金 |
| | | wqMoney = wqMoney.add(weiQuanOrder.getMoney()); |
| | | weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); |
| | | weiQuanDrawBack.setCreateTime(new Date()); |
| | | // 退款的资金 |
| | | wqMoney = wqMoney.add(weiQuanOrder.getMoney()); |
| | | weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); |
| | | weiQuanDrawBack.setCreateTime(new Date()); |
| | | |
| | | 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()); |
| | | 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); |
| | | } |
| | | weiQuanDrawBack.setDrawBackMoney(drawBack); |
| | | weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId()); |
| | | weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); |
| | | weiQuanDrawBack.setUser(new UserInfo(uid)); |
| | | newWeiQuanDrawBackList.add(weiQuanDrawBack); |
| | | } |
| | | |
| | | if (wqMoney.compareTo(new BigDecimal("0")) <= 0) |
| | | continue; |
| | | if (wqMoney.compareTo(new BigDecimal("0")) <= 0) |
| | | continue; |
| | | |
| | | // 插入记录 |
| | | for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) { |
| | | taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack); |
| | | } |
| | | // 插入记录 |
| | | for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) { |
| | | taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack); |
| | | } |
| | | |
| | | // 退款金额 |
| | | BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); |
| | | 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; |
| | | } |
| | | // 退款金额 |
| | | BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); |
| | | 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; |
| | | } |
| | | |
| | | 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, "资金记录生成失败"); |
| | | userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); |
| | | UserMoneyDetail userMoneyDetail = null; |
| | | // 新版资金记录 |
| | | try { |
| | | userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, orderId, newWeiQuanDrawBackList, 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(); |
| | | } |
| | | // 新版通知 |
| | | 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()); |
| | | } |
| | | 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()); |
| | | userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, |
| | | drawBackMoney, fanliMoney, goodsCount, orderList.get(0).getThirdCreateTime()); |
| | | |
| | | } else {// 记录资金记录,但是不显示给用户 |
| | | } 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, "插入记录生成失败"); |
| | | } |
| | | } |
| | | } |
| | | return userSubMoneyMap; |
| | | } |
| | | UserMoneyDetail userMoneyDetail = null; |
| | | // 新版资金记录 |
| | | try { |
| | | userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, orderId, newWeiQuanDrawBackList, 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, "插入记录生成失败"); |
| | | } |
| | | } |
| | | } |
| | | return userSubMoneyMap; |
| | | } |
| | | |
| | | private List<HongBaoV2> getWeiQuanMainHongBao(List<TaoBaoWeiQuanOrder> list, String orderId) { |
| | | // 查询是否为维权订单 |
| | | if (list == null || list.size() == 0) |
| | | return null; |
| | | // 获取和该订单号有关联的用户 |
| | | // 查询还未扣款的主红包 |
| | | 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); |
| | | private List<HongBaoV2> getWeiQuanMainHongBao(List<TaoBaoWeiQuanOrder> list, String orderId) { |
| | | // 查询是否为维权订单 |
| | | if (list == null || list.size() == 0) |
| | | return null; |
| | | // 获取和该订单号有关联的用户 |
| | | // 查询还未扣款的主红包 |
| | | 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)// 添加还未扣款的子订单 |
| | | mainHongBaoList.add(hongBaoOrder.getHongBaoV2()); |
| | | } |
| | | } |
| | | } |
| | | return mainHongBaoList; |
| | | } |
| | | 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)// 添加还未扣款的子订单 |
| | | 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, "订单号为空值"); |
| | | @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<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId); |
| | | List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId); |
| | | if (list == null || list.size() == 0) |
| | | return; |
| | | List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId); |
| | | |
| | | if (mainHongBaoList == null || mainHongBaoList.size() == 0) |
| | | return; |
| | | if (mainHongBaoList == null || mainHongBaoList.size() == 0) |
| | | return; |
| | | |
| | | // 主用户ID |
| | | Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); |
| | | // 主用户ID |
| | | Map<Long, BigDecimal> fanMoneyMap = new HashMap<>(); |
| | | |
| | | if (mainHongBaoList != null) |
| | | for (HongBaoV2 hongBao : mainHongBaoList) {// 统计订单下的所有主红包 |
| | | hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId()); |
| | | if (hongBao.getState() != HongBaoV2.STATE_YILINGQU) |
| | | continue; |
| | | if (mainHongBaoList != null) |
| | | for (HongBaoV2 hongBao : mainHongBaoList) {// 统计订单下的所有主红包 |
| | | hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId()); |
| | | if (hongBao.getState() != HongBaoV2.STATE_YILINGQU) |
| | | continue; |
| | | |
| | | // 只计入分享赚的红包 |
| | | if (hongBao.getType() == HongBaoV2.TYPE_SHARE_GOODS) { |
| | | // 累计主红包的金额 |
| | | 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())); |
| | | } |
| | | } |
| | | // 只计入分享赚的红包 |
| | | if (hongBao.getType() == HongBaoV2.TYPE_SHARE_GOODS) { |
| | | // 累计主红包的金额 |
| | | 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())); |
| | | } |
| | | } |
| | | |
| | | Iterator<Long> its = fanMoneyMap.keySet().iterator(); |
| | | // 查询和这个订单有关的用户(主订单) |
| | | while (its.hasNext()) { |
| | | Long uid = its.next(); |
| | | BigDecimal userGetMoney = fanMoneyMap.get(uid); |
| | | BigDecimal wqMoney = new BigDecimal("0"); |
| | | BigDecimal settleMent = new BigDecimal("0"); |
| | | // 统计用户在这个单中需要扣除的资金 |
| | | TaoBaoWeiQuanDrawBack weiQuanDrawBack = null; |
| | | Iterator<Long> its = fanMoneyMap.keySet().iterator(); |
| | | // 查询和这个订单有关的用户(主订单) |
| | | while (its.hasNext()) { |
| | | Long uid = its.next(); |
| | | BigDecimal userGetMoney = fanMoneyMap.get(uid); |
| | | 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, "未找到子订单相关数据"); |
| | | 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, "淘宝结算金额为空"); |
| | | if (taoBaoOrder.getSettlement() == null) |
| | | throw new TaoBaoWeiQuanException(102, "淘宝结算金额为空"); |
| | | |
| | | settleMent = settleMent.add(taoBaoOrder.getSettlement()); |
| | | settleMent = settleMent.add(taoBaoOrder.getSettlement()); |
| | | |
| | | // 退款的资金 |
| | | wqMoney = wqMoney.add(weiQuanOrder.getMoney()); |
| | | // 插入记录 |
| | | weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); |
| | | weiQuanDrawBack.setCreateTime(new Date()); |
| | | // 计算退款资金 |
| | | 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()); |
| | | // 退款的资金 |
| | | wqMoney = wqMoney.add(weiQuanOrder.getMoney()); |
| | | // 插入记录 |
| | | weiQuanDrawBack = new TaoBaoWeiQuanDrawBack(); |
| | | weiQuanDrawBack.setCreateTime(new Date()); |
| | | // 计算退款资金 |
| | | 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.setDrawBackMoney(drawBack); |
| | | |
| | | weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId()); |
| | | weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); |
| | | weiQuanDrawBack.setUser(new UserInfo(uid)); |
| | | newWeiQuanDrawBackList.add(weiQuanDrawBack); |
| | | } |
| | | weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId()); |
| | | weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId()); |
| | | weiQuanDrawBack.setUser(new UserInfo(uid)); |
| | | newWeiQuanDrawBackList.add(weiQuanDrawBack); |
| | | } |
| | | |
| | | if (wqMoney.compareTo(new BigDecimal("0")) <= 0) |
| | | continue; |
| | | if (wqMoney.compareTo(new BigDecimal("0")) <= 0) |
| | | continue; |
| | | |
| | | // 退款金额 |
| | | BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); |
| | | if (drawBackMoney.compareTo(userGetMoney) > 0) |
| | | drawBackMoney = userGetMoney; |
| | | // 退款金额 |
| | | BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney); |
| | | if (drawBackMoney.compareTo(userGetMoney) > 0) |
| | | drawBackMoney = userGetMoney; |
| | | |
| | | for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) |
| | | taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack); |
| | | // 计算资金是否充足 |
| | | 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()); |
| | | 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; |
| | | } |
| | | for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) |
| | | taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack); |
| | | // 计算资金是否充足 |
| | | 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()); |
| | | 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 = UserMoneyDetailFactory.createShareWeiQuan(uid, weiQuanDrawBack, drawBackMoney); |
| | | } catch (UserMoneyDetailException e) { |
| | | try { |
| | | LogHelper.errorDetailInfo(e); |
| | | } catch (Exception e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); |
| | | UserMoneyDetail userMoneyDetail = null; |
| | | // 新版资金记录 |
| | | try { |
| | | userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(uid, weiQuanDrawBack, drawBackMoney); |
| | | } catch (UserMoneyDetailException e) { |
| | | try { |
| | | LogHelper.errorDetailInfo(e); |
| | | } catch (Exception e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | 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(); |
| | | } |
| | | // 新版通知 |
| | | 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()); |
| | | } |
| | | 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()); |
| | | } |
| | | } |
| | | userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney, |
| | | fanliMoney, goodsCount, orderList.get(0).getThirdCreateTime()); |
| | | } |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @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; |
| | | // 查询订单库 |
| | | 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()); |
| | | } |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @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; |
| | | // 查询订单库 |
| | | 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()); |
| | | } |
| | | |
| | | |
| | | CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, |
| | | weiQuanOrder.getOrderItemId()); |
| | | if (commonOrder == null) |
| | | throw new TaoBaoWeiQuanException(2, "订单有误"); |
| | | CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO, |
| | | weiQuanOrder.getOrderItemId()); |
| | | if (commonOrder == null) |
| | | throw new TaoBaoWeiQuanException(2, "订单有误"); |
| | | |
| | | HongBaoOrder hongbaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); |
| | | HongBaoOrder hongbaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); |
| | | |
| | | if (hongbaoOrder == null || hongbaoOrder.getHongBaoV2() == null) |
| | | throw new TaoBaoWeiQuanException(3, "红包有误"); |
| | | if (hongbaoOrder == null || hongbaoOrder.getHongBaoV2() == null) |
| | | throw new TaoBaoWeiQuanException(3, "红包有误"); |
| | | |
| | | // 查询下级子用户 |
| | | List<HongBaoV2> childList = hongBaoV2Mapper.listChildrenById(hongbaoOrder.getHongBaoV2().getId()); |
| | | // 查询下级子用户 |
| | | 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 (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) { |
| | | if (drawBackMoney != null && drawBackMoney.compareTo(new BigDecimal(0)) > 0) { |
| | | |
| | | // 判断资金是否足够扣款 |
| | | UserInfo user = userInfoMapper.selectByPrimaryKey(uid); |
| | | if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足 |
| | | { |
| | | try { |
| | | addDebt(uid, child.getId(), drawBackMoney); |
| | | } catch (UserMoneyDebtException e) { |
| | | throw new TaoBaoWeiQuanException(101, "资金借贷异常"); |
| | | } |
| | | continue; |
| | | } |
| | | // 判断资金是否足够扣款 |
| | | UserInfo user = userInfoMapper.selectByPrimaryKey(uid); |
| | | if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足 |
| | | { |
| | | try { |
| | | addDebt(uid, child.getId(), drawBackMoney); |
| | | } catch (UserMoneyDebtException e) { |
| | | throw new TaoBaoWeiQuanException(101, "资金借贷异常"); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | UserMoneyDetail userMoneyDetail = null; |
| | | // 新版资金记录 |
| | | try { |
| | | userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid, weiQuanDrawBack, |
| | | drawBackMoney); |
| | | } catch (UserMoneyDetailException e) { |
| | | try { |
| | | LogHelper.errorDetailInfo(e); |
| | | } catch (Exception e1) { |
| | | e1.printStackTrace(); |
| | | } |
| | | } |
| | | 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); |
| | | userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail); |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @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 selectByOrderItemId(String orderItemId) { |
| | | List<TaoBaoWeiQuanDrawBack> list = taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId); |
| | | if (list != null && list.size() > 0) |
| | | return list.get(0); |
| | | else |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<TaoBaoWeiQuanDrawBack> getByOrderItemId(String orderItemId) { |
| | | return taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId); |
| | | } |
| | | @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 selectByOrderItemIdAndUid(String orderItemId, Long uid) { |
| | | return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(orderItemId, uid); |
| | | } |
| | | |
| | | @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; |
| | | } |
| | | @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; |
| | | } |
| | | |
| | | } |