|
@@ -11,6 +11,9 @@ import cn.newfeifan.mall.framework.common.core.KeyValue;
|
|
import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
|
|
import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
|
|
import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
|
|
import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
|
|
import cn.newfeifan.mall.framework.common.util.number.MoneyUtils;
|
|
import cn.newfeifan.mall.framework.common.util.number.MoneyUtils;
|
|
|
|
+import cn.newfeifan.mall.module.distri.constant.DistriConstants;
|
|
|
|
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
|
|
|
|
+import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
|
|
import cn.newfeifan.mall.module.member.api.address.MemberAddressApi;
|
|
import cn.newfeifan.mall.module.member.api.address.MemberAddressApi;
|
|
import cn.newfeifan.mall.module.member.api.address.dto.MemberAddressRespDTO;
|
|
import cn.newfeifan.mall.module.member.api.address.dto.MemberAddressRespDTO;
|
|
import cn.newfeifan.mall.module.pay.api.order.PayOrderApi;
|
|
import cn.newfeifan.mall.module.pay.api.order.PayOrderApi;
|
|
@@ -19,6 +22,8 @@ import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderRespDTO;
|
|
import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
|
|
import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
|
|
import cn.newfeifan.mall.module.product.api.comment.ProductCommentApi;
|
|
import cn.newfeifan.mall.module.product.api.comment.ProductCommentApi;
|
|
import cn.newfeifan.mall.module.product.api.comment.dto.ProductCommentCreateReqDTO;
|
|
import cn.newfeifan.mall.module.product.api.comment.dto.ProductCommentCreateReqDTO;
|
|
|
|
+import cn.newfeifan.mall.module.product.dal.dataobject.sku.ProductSkuDO;
|
|
|
|
+import cn.newfeifan.mall.module.product.dal.mysql.sku.ProductSkuMapper;
|
|
import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
|
|
import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
|
|
import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO;
|
|
import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO;
|
|
import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO;
|
|
import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO;
|
|
@@ -68,12 +73,11 @@ import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Objects;
|
|
|
|
-import java.util.Set;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.*;
|
|
import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.*;
|
|
@@ -99,6 +103,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
@Resource
|
|
@Resource
|
|
private TradeNoRedisDAO tradeNoRedisDAO;
|
|
private TradeNoRedisDAO tradeNoRedisDAO;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private IntegralService integralService;
|
|
|
|
+
|
|
@Resource
|
|
@Resource
|
|
private List<TradeOrderHandler> tradeOrderHandlers;
|
|
private List<TradeOrderHandler> tradeOrderHandlers;
|
|
|
|
|
|
@@ -126,6 +133,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
@Value("${feifan.trade.express.kd100.key}")
|
|
@Value("${feifan.trade.express.kd100.key}")
|
|
private String key;
|
|
private String key;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private ProductSkuMapper productSkuMapper;
|
|
|
|
+
|
|
// =================== Order ===================
|
|
// =================== Order ===================
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -361,7 +371,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_DELIVERY)
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_DELIVERY)
|
|
public void deliveryOrder(TradeOrderDeliveryReqVO deliveryReqVO) {
|
|
public void deliveryOrder(TradeOrderDeliveryReqVO deliveryReqVO) {
|
|
//校验发货信息不能都为空
|
|
//校验发货信息不能都为空
|
|
- if(deliveryReqVO.getLogisticsNo() == null && deliveryReqVO.getDeliveryRemark() == null){
|
|
|
|
|
|
+ if (deliveryReqVO.getLogisticsNo() == null && deliveryReqVO.getDeliveryRemark() == null) {
|
|
throw exception(ORDER_DELIVERY_DETAILS_IS_NULL);
|
|
throw exception(ORDER_DELIVERY_DETAILS_IS_NULL);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -398,10 +408,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
}
|
|
}
|
|
|
|
|
|
// 执行更新
|
|
// 执行更新
|
|
- if(deliveryReqVO.getDeliveryRemark() != null){
|
|
|
|
|
|
+ if (deliveryReqVO.getDeliveryRemark() != null) {
|
|
//如果是虚拟商品直接完成发货和签收
|
|
//如果是虚拟商品直接完成发货和签收
|
|
updateOrderObj.setStatus(TradeOrderStatusEnum.COMPLETED.getStatus()).setDeliveryTime(LocalDateTime.now()).setReceivingTime(LocalDateTime.now());
|
|
updateOrderObj.setStatus(TradeOrderStatusEnum.COMPLETED.getStatus()).setDeliveryTime(LocalDateTime.now()).setReceivingTime(LocalDateTime.now());
|
|
- }else{
|
|
|
|
|
|
+ } else {
|
|
updateOrderObj.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()).setDeliveryTime(LocalDateTime.now());
|
|
updateOrderObj.setStatus(TradeOrderStatusEnum.DELIVERED.getStatus()).setDeliveryTime(LocalDateTime.now());
|
|
}
|
|
}
|
|
int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(), updateOrderObj);
|
|
int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(), updateOrderObj);
|
|
@@ -977,6 +987,50 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
tradeOrderMapper.updateById(order);
|
|
tradeOrderMapper.updateById(order);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ public void updateOrderItemByFreezeHighQuota() {
|
|
|
|
+ List<TradeOrderDO> tradeOrderDOS = tradeOrderMapper.selectList(new LambdaQueryWrapper<TradeOrderDO>()
|
|
|
|
+ .eq(TradeOrderDO::getPayStatus, true)
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ for (TradeOrderDO tradeOrderDO : tradeOrderDOS) {
|
|
|
|
+ List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectList(new LambdaQueryWrapper<TradeOrderItemDO>()
|
|
|
|
+ .eq(TradeOrderItemDO::getOrderId, tradeOrderDO.getId())
|
|
|
|
+ .isNull(TradeOrderItemDO::getAfterSaleId)
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ Long totalFreezeHighQuota = 0L;
|
|
|
|
+
|
|
|
|
+ //订单项
|
|
|
|
+ for (TradeOrderItemDO orderItem : tradeOrderItemDOS) {
|
|
|
|
+ ProductSkuDO productSkuDO = productSkuMapper.selectById(orderItem.getSkuId());
|
|
|
|
+
|
|
|
|
+ //毛利
|
|
|
|
+ Integer promotionExpenses = (productSkuDO.getPrice() - productSkuDO.getCostPrice())
|
|
|
|
+ * orderItem.getCount();
|
|
|
|
+
|
|
|
|
+ //毛利 * 10 = 峰值
|
|
|
|
+ BigDecimal grossProfit = new BigDecimal(promotionExpenses).multiply(new BigDecimal(1)).setScale(4, RoundingMode.DOWN);
|
|
|
|
+ BigDecimal freezeHighQuota = grossProfit.multiply(new BigDecimal("10"));
|
|
|
|
+ freezeHighQuota = money2Integral(freezeHighQuota);
|
|
|
|
+ Long freezeHighQuotaInt = freezeHighQuota.longValue();
|
|
|
|
+
|
|
|
|
+ totalFreezeHighQuota += freezeHighQuotaInt;
|
|
|
|
+
|
|
|
|
+ orderItem.setFreezeHighQuota(freezeHighQuotaInt);
|
|
|
|
+ tradeOrderItemMapper.updateById(orderItem);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //修改购物者本人获得的冻结峰值
|
|
|
|
+ integralService.updateIntegralFreezeHighQuota(tradeOrderDO.getUserId(), tradeOrderDO.getUserId(), CaclEnum.ORDER_PAY_FREEZE_HIGH_QUOTA,totalFreezeHighQuota,tradeOrderDO.getId(),tradeOrderDO.getNo(),tradeOrderDO.getPayTime());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static BigDecimal money2Integral(BigDecimal money) {
|
|
|
|
+ return money.multiply(DistriConstants.MONEY2INTEGRAL_BIG_DECIMAL);
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 创建单个订单的评论
|
|
* 创建单个订单的评论
|
|
*
|
|
*
|