|
@@ -34,6 +34,7 @@ import com.cyksj.dto.RedisKey;
|
|
|
import com.cyksj.dto.Result;
|
|
import com.cyksj.dto.Result;
|
|
|
import com.cyksj.enums.GatewayResponse;
|
|
import com.cyksj.enums.GatewayResponse;
|
|
|
import com.cyksj.mapper.*;
|
|
import com.cyksj.mapper.*;
|
|
|
|
|
+import com.cyksj.mapper.manage.distribute.*;
|
|
|
import com.cyksj.model.dto.AliPayParams;
|
|
import com.cyksj.model.dto.AliPayParams;
|
|
|
import com.cyksj.model.dto.H5JsPayParams;
|
|
import com.cyksj.model.dto.H5JsPayParams;
|
|
|
import com.cyksj.model.dto.WxMpTemplateData;
|
|
import com.cyksj.model.dto.WxMpTemplateData;
|
|
@@ -120,6 +121,16 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
|
|
private final RefundOrderDonMapper refundOrderDonMapper;
|
|
private final RefundOrderDonMapper refundOrderDonMapper;
|
|
|
|
|
|
|
|
|
|
+ private final UserDistributeSharedMapper userDistributeSharedMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final DistributeWaitingSendPointsMapper distributeWaitingSendPointsMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final DistributePointsExchangeMoneyMapper distributePointsExchangeMoneyMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final UserDistributeMapper userDistributeMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final UserPlatDistributeRateMapper userPlatDistributeRateMapper;
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
@Override
|
|
@Override
|
|
@@ -210,6 +221,17 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDon.setStatus(OrderDon.Status.noPayment);
|
|
orderDon.setStatus(OrderDon.Status.noPayment);
|
|
|
orderDon.setUserId(user.getId());
|
|
orderDon.setUserId(user.getId());
|
|
|
orderDon.setType(OrderDon.Type.getType(payRequest.getType()));
|
|
orderDon.setType(OrderDon.Type.getType(payRequest.getType()));
|
|
|
|
|
+ //虚拟商品订单,是否是分销订单
|
|
|
|
|
+ if (goodsDon.getType() == 1) {
|
|
|
|
|
+ UserDistributeShared userDistributeShared = userDistributeSharedMapper.selectOne(Wrappers.lambdaQuery(UserDistributeShared.class).eq(UserDistributeShared::getUserId, user.getId()).last("limit 1"));
|
|
|
|
|
+ if (userDistributeShared != null) {
|
|
|
|
|
+ orderDon.setIsDistribute(true);
|
|
|
|
|
+ UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, user.getId()));
|
|
|
|
|
+ if (userDistribute != null) {
|
|
|
|
|
+ orderDon.setIsFixedDistribute(true);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
this.saveOrUpdate(orderDon);
|
|
this.saveOrUpdate(orderDon);
|
|
|
|
|
|
|
|
|
|
|
|
@@ -327,6 +349,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
}
|
|
}
|
|
|
updateCarParkAndSendMsg(goodsDon, sku, order);
|
|
updateCarParkAndSendMsg(goodsDon, sku, order);
|
|
|
order.setType(OrderDon.Type.WeChat);
|
|
order.setType(OrderDon.Type.WeChat);
|
|
|
|
|
+ if (order.getMoney().compareTo(BigDecimal.ZERO) > 0 && order.getIsDistribute()) {
|
|
|
|
|
+ TASK_POOL.execute(() -> distributeWaitingSendPointsRecord(order));
|
|
|
|
|
+ }
|
|
|
this.updateById(order);
|
|
this.updateById(order);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -469,6 +494,13 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDon.setStatus(OrderDon.Status.noPayment);
|
|
orderDon.setStatus(OrderDon.Status.noPayment);
|
|
|
orderDon.setUserId(user.getId());
|
|
orderDon.setUserId(user.getId());
|
|
|
orderDon.setGoodsId(goodsDon.getId());
|
|
orderDon.setGoodsId(goodsDon.getId());
|
|
|
|
|
+ //虚拟商品订单,是否是分销订单
|
|
|
|
|
+ if (goodsDon.getType() == 1) {
|
|
|
|
|
+ UserDistributeShared userDistributeShared = userDistributeSharedMapper.selectOne(Wrappers.lambdaQuery(UserDistributeShared.class).eq(UserDistributeShared::getUserId, user.getId()).last("limit 1"));
|
|
|
|
|
+ if (userDistributeShared != null) {
|
|
|
|
|
+ orderDon.setIsDistribute(true);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
this.saveOrUpdate(orderDon);
|
|
this.saveOrUpdate(orderDon);
|
|
|
|
|
|
|
|
jobManager.addJob(EXPIRY_TIME, () -> {
|
|
jobManager.addJob(EXPIRY_TIME, () -> {
|
|
@@ -537,6 +569,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
//修改车位状态并发送模板消息
|
|
//修改车位状态并发送模板消息
|
|
|
updateCarParkAndSendMsg(goodsDon, sku, orderDon);
|
|
updateCarParkAndSendMsg(goodsDon, sku, orderDon);
|
|
|
orderDon.setType(OrderDon.Type.ALI_PAY);
|
|
orderDon.setType(OrderDon.Type.ALI_PAY);
|
|
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0 && orderDon.getIsDistribute()) {
|
|
|
|
|
+ TASK_POOL.execute(() -> distributeWaitingSendPointsRecord(orderDon));
|
|
|
|
|
+ }
|
|
|
this.updateById(orderDon);
|
|
this.updateById(orderDon);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -578,6 +613,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
//修改订单状态
|
|
//修改订单状态
|
|
|
orderDon.setStatus(OrderDon.Status.refund);
|
|
orderDon.setStatus(OrderDon.Status.refund);
|
|
|
orderDon.setRefundMoney(wxOrderRefundReq.getRefundMoney());
|
|
orderDon.setRefundMoney(wxOrderRefundReq.getRefundMoney());
|
|
|
|
|
+ if (orderDon.getIsDistribute()) {
|
|
|
|
|
+ distributeWaitingSendPointsMapper.updateOrderStatus(orderDon.getId(), DistributeWaitingSendPoints.Status.close);
|
|
|
|
|
+ }
|
|
|
orderDonMapper.updateById(orderDon);
|
|
orderDonMapper.updateById(orderDon);
|
|
|
//记录退款信息
|
|
//记录退款信息
|
|
|
final String outNo = outRefundNo;
|
|
final String outNo = outRefundNo;
|
|
@@ -643,6 +681,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
AliPayRefundRep.AlipayTradeRefundResponse res = aliPayRefundRep.getResponse();
|
|
AliPayRefundRep.AlipayTradeRefundResponse res = aliPayRefundRep.getResponse();
|
|
|
orderDon.setRefundMoney(res.getRefundFee().multiply(BigDecimal.valueOf(100)));
|
|
orderDon.setRefundMoney(res.getRefundFee().multiply(BigDecimal.valueOf(100)));
|
|
|
} else orderDon.setRefundMoney(BigDecimal.ZERO);
|
|
} else orderDon.setRefundMoney(BigDecimal.ZERO);
|
|
|
|
|
+ if (orderDon.getIsDistribute()) {
|
|
|
|
|
+ distributeWaitingSendPointsMapper.updateOrderStatus(orderDon.getId(), DistributeWaitingSendPoints.Status.close);
|
|
|
|
|
+ }
|
|
|
orderDonMapper.updateById(orderDon);
|
|
orderDonMapper.updateById(orderDon);
|
|
|
//记录退款信息
|
|
//记录退款信息
|
|
|
THREAD_POOL_TASK_EXECUTOR.execute(()->{
|
|
THREAD_POOL_TASK_EXECUTOR.execute(()->{
|
|
@@ -765,6 +806,12 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDon.setRefundMoney(refundMoney);
|
|
orderDon.setRefundMoney(refundMoney);
|
|
|
orderDonMapper.updateById(orderDon);
|
|
orderDonMapper.updateById(orderDon);
|
|
|
}
|
|
}
|
|
|
|
|
+ if (orderDon.getIsDistribute()) {
|
|
|
|
|
+ DistributeWaitingSendPoints distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getOrderId, orderDon.getId()).last("limit 1"));
|
|
|
|
|
+ if (distributeWaitingSendPoints != null && distributeWaitingSendPoints.getSendStatus() != DistributeWaitingSendPoints.Status.close) {
|
|
|
|
|
+ distributeWaitingSendPointsMapper.updateOrderStatus(orderDon.getId(), DistributeWaitingSendPoints.Status.close);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
log.info("微信退款: 退款单号[{}] 退款成功.", outRefundNo);
|
|
log.info("微信退款: 退款单号[{}] 退款成功.", outRefundNo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -936,4 +983,53 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 分销待发积分记录
|
|
|
|
|
+ */
|
|
|
|
|
+ public void distributeWaitingSendPointsRecord(OrderDon order) {
|
|
|
|
|
+ DistributeWaitingSendPoints distributeWaitingSendPoints = new DistributeWaitingSendPoints();
|
|
|
|
|
+ distributeWaitingSendPoints.setOrderId(order.getId());
|
|
|
|
|
+ distributeWaitingSendPoints.setUserId(order.getUserId());
|
|
|
|
|
+ BigDecimal orderMoney = order.getMoney();
|
|
|
|
|
+ BigDecimal points = null;
|
|
|
|
|
+ BigDecimal returnMoney = null;
|
|
|
|
|
+ UserDistributeShared userDistributeShared = userDistributeSharedMapper.selectOne(Wrappers.lambdaQuery(UserDistributeShared.class).eq(UserDistributeShared::getUserId, order.getUserId()).last("limit 1"));
|
|
|
|
|
+ if (userDistributeShared != null) {
|
|
|
|
|
+ distributeWaitingSendPoints.setSharedId(userDistributeShared.getSharedId());
|
|
|
|
|
+ DistributePointsExchangeMoney distributePointsExchangeMoney = distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).orderByDesc(DistributePointsExchangeMoney::getPoints).last("limit 1"));
|
|
|
|
|
+ if (distributePointsExchangeMoney == null) {
|
|
|
|
|
+ log.info("分销兑换积分比例未配置");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userDistributeShared.getSharedId()).eq(UserDistribute::getDeleted, true).last("limit 1"));
|
|
|
|
|
+ if (userDistribute == null) {
|
|
|
|
|
+ //普通分销
|
|
|
|
|
+ GoodsDon goodsDon = goodsDonMapper.selectById(order.getGoodsId());
|
|
|
|
|
+ if (goodsDon != null) {
|
|
|
|
|
+ returnMoney = orderMoney.multiply(BigDecimal.valueOf(goodsDon.getRate())).divide(BigDecimal.valueOf(100));
|
|
|
|
|
+ }
|
|
|
|
|
+ }else {
|
|
|
|
|
+ //固定推广分销
|
|
|
|
|
+ UserPlatDistributeRate userPlatDistributeRate = userPlatDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatDistributeRate.class)
|
|
|
|
|
+ .eq(UserPlatDistributeRate::getGoodsId, order.getGoodsId())
|
|
|
|
|
+ .eq(UserPlatDistributeRate::getDistributeId, userDistribute.getId())
|
|
|
|
|
+ .last("limit 1"));
|
|
|
|
|
+ if (userPlatDistributeRate != null) {
|
|
|
|
|
+ returnMoney = orderMoney.multiply(BigDecimal.valueOf(userPlatDistributeRate.getRate())).divide(BigDecimal.valueOf(100));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (returnMoney != null) {
|
|
|
|
|
+ BigDecimal returnPoints = returnMoney.multiply(BigDecimal.valueOf(distributePointsExchangeMoney.getPoints())).divide(distributePointsExchangeMoney.getMoney(), 2, RoundingMode.HALF_DOWN);
|
|
|
|
|
+ points = returnPoints;
|
|
|
|
|
+ }
|
|
|
|
|
+ distributeWaitingSendPoints.setPoints(points);
|
|
|
|
|
+ if (points != null && points.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
|
+ log.info("用户{}邀请{},产生分销订单分发积分记录入库", userDistributeShared.getUserId(), order.getUserId());
|
|
|
|
|
+ distributeWaitingSendPoints.setSendStatus(DistributeWaitingSendPoints.Status.waiting);
|
|
|
|
|
+ distributeWaitingSendPoints.setSendTime(DateUtil.offsetDay(order.getPayTime(), 7));
|
|
|
|
|
+ distributeWaitingSendPointsMapper.insert(distributeWaitingSendPoints);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|