Просмотр исходного кода

周转率新增字段,订单退换货生成新订单

fgd 1 год назад
Родитель
Сommit
4f85bfb40f

+ 21 - 3
sd-business/src/main/java/com/sd/business/entity/board/vo/TurnoverRateStatisticsVo.java

@@ -37,20 +37,38 @@ public class TurnoverRateStatisticsVo {
     private BigDecimal turnoverRateThirtyDays;
 
     /**
+     * 30天销售量
+     */
+    @ExcelProperty(value = "30天销售量", index = 3)
+    private BigDecimal salesQuantityThirtyDays;
+
+    /**
      * 周转率
      */
-    @ExcelProperty(value = "60天周转率", index = 3)
+    @ExcelProperty(value = "60天周转率", index = 4)
     private BigDecimal turnoverRateSixtyDays;
 
     /**
+     * 60天销售量
+     */
+    @ExcelProperty(value = "60天销售量", index = 5)
+    private BigDecimal salesQuantitySixtyDays;
+
+    /**
      * 周转率
      */
-    @ExcelProperty(value = "90天周转率", index = 4)
+    @ExcelProperty(value = "90天周转率", index = 6)
     private BigDecimal turnoverRateNinetyDays;
 
     /**
+     * 90天销售量
+     */
+    @ExcelProperty(value = "90天销售量", index = 7)
+    private BigDecimal salesQuantityNinetyDays;
+
+    /**
      * 库存数量
      */
-    @ExcelProperty(value = "库存数量", index = 5)
+    @ExcelProperty(value = "库存数量", index = 8)
     private BigDecimal quantity;
 }

+ 1 - 0
sd-business/src/main/java/com/sd/business/entity/order/enums/OrderStatusEnum.java

@@ -20,6 +20,7 @@ public enum OrderStatusEnum {
     COMPLETION_PRODUCTION(40, "生产完成"),
     HAVE_BEEN_SHIPPED(50, "已发货"),
     SUSPEND(60, "挂起"),
+    EXCHANGE(90, "已售后"),
 
     ;
 

+ 90 - 12
sd-business/src/main/java/com/sd/business/service/order/impl/OrderExchangeServiceImpl.java

@@ -1,6 +1,7 @@
 package com.sd.business.service.order.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -16,18 +17,15 @@ import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.order.dto.OrderExchangeDto;
 import com.sd.business.entity.order.dto.OrderExchangeSelectDto;
 import com.sd.business.entity.order.enums.OrderClassifyEnum;
-import com.sd.business.entity.order.po.OrderExchange;
-import com.sd.business.entity.order.po.OrderExchangeDetail;
-import com.sd.business.entity.order.po.OrderInfo;
-import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.entity.order.enums.OrderStatusEnum;
+import com.sd.business.entity.order.po.*;
 import com.sd.business.entity.order.vo.OrderExchangeDetailVo;
 import com.sd.business.entity.order.vo.OrderExchangeVo;
+import com.sd.business.entity.statement.dto.StatementOfAccountDto;
 import com.sd.business.mapper.order.OrderExchangeMapper;
-import com.sd.business.service.order.OrderExchangeDetailService;
-import com.sd.business.service.order.OrderExchangeService;
-import com.sd.business.service.order.OrderService;
-import com.sd.business.service.order.OrderSkuService;
+import com.sd.business.service.order.*;
 import com.sd.business.service.sku.SkuSpecService;
+import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.business.util.CodeEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -60,6 +58,12 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
     @Autowired
     private OrderService orderService;
 
+    @Autowired
+    private OrderSkuBomService orderSkuBomService;
+
+    @Autowired
+    private StatementOfAccountService statementOfAccountService;
+
     @Override
     public Page<OrderExchangeVo> getPage(OrderExchangeSelectDto dto) {
         IWrapper<OrderExchange> wrapper = getWrapper();
@@ -201,10 +205,54 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
         orderExchangeDetailService.saveBatch(orderExchangeDetailList);
         ObsFileUtil.saveFile(orderExchangeDto.getFileList(), orderExchangeDto.getId());
 
-        // 订单分类修改为售后订单
-        orderService.update(q -> q
-                .set(OrderInfo::getClassify, OrderClassifyEnum.AFTER_SALE_ORDER.getKey())
-                .eq(BaseIdPo::getId, orderExchangeDto.getOrderInfoId()));
+        Map<Long, BigDecimal> exchangeDetailMap = orderExchangeDetailList.stream()
+                .filter(item -> item.getQuantity().compareTo(BigDecimal.ZERO) > 0)
+                .collect(Collectors.toMap(OrderExchangeDetail::getOrderSkuId, OrderExchangeDetail::getQuantity));
+        if (ObjectUtil.isEmpty(exchangeDetailMap)) {
+            return;
+        }
+        // 新增售后订单,分类修改为售后订单
+        OrderInfo orderInfo = orderService.getById(orderExchangeDto.getOrderInfoId());
+        orderInfo.setId(IdWorker.getId());
+        orderInfo.setWlnUid(null);
+        orderInfo.setClassify(OrderClassifyEnum.AFTER_SALE_ORDER.getKey());
+        orderInfo.setStatus(OrderStatusEnum.EXCHANGE.getKey());
+        orderInfo.setTotalAmount(BigDecimal.ZERO);
+        orderInfo.setProductTotalAmount(BigDecimal.ZERO);
+        orderInfo.setCustomProcessingFee(BigDecimal.ZERO);
+        orderInfo.setLssueFee(BigDecimal.ZERO);
+        orderInfo.setDeliveryMaterialsFee(BigDecimal.ZERO);
+        orderInfo.setPackingLabor(BigDecimal.ZERO);
+        orderInfo.setManagementFee(BigDecimal.ZERO);
+        orderInfo.setPackagingMaterialCost(BigDecimal.ZERO);
+        List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(BaseIdPo::getId, exchangeDetailMap.keySet()));
+        Map<Long, Long> orderSkuIdMap = new HashMap<>();
+        for (OrderSku orderSku : orderSkuList) {
+            BigDecimal quantity = exchangeDetailMap.get(orderSku.getId());
+            long orderSkuId = IdWorker.getId();
+            orderSkuIdMap.put(orderSku.getId(), orderSkuId);
+            orderSku.setQuantity(quantity);
+            orderSku.setId(orderSkuId);
+            orderSku.setOrderId(orderInfo.getId());
+            this.addOrderInfoPrice(orderInfo, orderSku);
+        }
+        List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderSkuId, exchangeDetailMap.keySet()));
+        // 替换订单id和订单sku id
+        for (OrderSkuBom orderSkuBom : orderSkuBomList) {
+            orderSkuBom.setId(null);
+            orderSkuBom.setOrderId(orderInfo.getId());
+            orderSkuBom.setOrderSkuId(orderSkuIdMap.get(orderSkuBom.getOrderSkuId()));
+        }
+
+        // 新增订单信息
+        orderService.save(orderInfo);
+        orderSkuService.saveBatch(orderSkuList);
+        orderSkuBomService.saveBatch(orderSkuBomList);
+        // 生成对账单
+        StatementOfAccountDto statement = new StatementOfAccountDto();
+        statement.setDepartmentId(orderInfo.getDepartmentId());
+        statement.setOrderIdList(Collections.singletonList(orderInfo.getId()));
+        statementOfAccountService.add(statement);
     }
 
     @Override
@@ -212,4 +260,34 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
         this.removeById(id);
     }
 
+    /**
+     * 添加订单价格
+     */
+    private void addOrderInfoPrice(OrderInfo orderInfo, OrderSku orderSku) {
+        BigDecimal quantity = orderSku.getQuantity();
+
+        BigDecimal productTotalAmount = quantity.multiply(orderSku.getUnitPrice());
+        BigDecimal customProcessingFee = quantity.multiply(orderSku.getCustomProcessingFee());
+        BigDecimal lssueFee = quantity.multiply(orderSku.getLssueFee());
+        BigDecimal deliveryMaterialsFee = quantity.multiply(orderSku.getDeliveryMaterialsFee());
+        BigDecimal packingLabor = quantity.multiply(orderSku.getPackingLabor());
+        BigDecimal packagingMaterialCost = quantity.multiply(orderSku.getPackagingMaterialCost());
+        BigDecimal managementFee = quantity.multiply(orderSku.getManagementFee());
+        BigDecimal totalAmount = productTotalAmount
+                .add(customProcessingFee)
+                .add(lssueFee)
+                .add(deliveryMaterialsFee)
+                .add(packingLabor)
+                .add(packagingMaterialCost)
+                .add(managementFee);
+
+        orderInfo.setProductTotalAmount(orderInfo.getProductTotalAmount().add(productTotalAmount));
+        orderInfo.setCustomProcessingFee(orderInfo.getCustomProcessingFee().add(customProcessingFee));
+        orderInfo.setLssueFee(orderInfo.getLssueFee().add(lssueFee));
+        orderInfo.setDeliveryMaterialsFee(orderInfo.getDeliveryMaterialsFee().add(deliveryMaterialsFee));
+        orderInfo.setPackingLabor(orderInfo.getPackingLabor().add(packingLabor));
+        orderInfo.setManagementFee(orderInfo.getManagementFee().add(managementFee));
+        orderInfo.setPackagingMaterialCost(orderInfo.getPackagingMaterialCost().add(packagingMaterialCost));
+        orderInfo.setTotalAmount(orderInfo.getTotalAmount().add(totalAmount));
+    }
 }

+ 3 - 0
sd-business/src/main/java/com/sd/business/service/order/impl/OrderSalesShipmentStatisticsServiceImpl.java

@@ -198,6 +198,9 @@ public class OrderSalesShipmentStatisticsServiceImpl extends ServiceImpl<OrderSa
             TurnoverRateStatisticsVo vo = new TurnoverRateStatisticsVo();
             vo.setBomSpecCode(item.getBomSpecCode());
             vo.setBomSpecName(item.getBomSpecName());
+            vo.setSalesQuantityThirtyDays(item.getThirtyDaysSalesQuantity());
+            vo.setSalesQuantitySixtyDays(item.getSixtyDaysSalesQuantity());
+            vo.setSalesQuantityNinetyDays(item.getNinetyDaysSalesQuantity());
             vo.setTurnoverRateNinetyDays(turnoverRateNinetyDays);
             vo.setTurnoverRateSixtyDays(turnoverRateSixtyDays);
             vo.setTurnoverRateThirtyDays(turnoverRateThirtyDays);