瀏覽代碼

Merge remote-tracking branch 'origin/master'

24282 1 年之前
父節點
當前提交
e6c49c8140

+ 8 - 0
sd-business/src/main/java/com/sd/business/controller/order/OrderController.java

@@ -193,4 +193,12 @@ public class OrderController {
         return orderService.returnBomList(dto.getId());
     }
 
+    /**
+     * 订单导出
+     */
+    @PostMapping("/orderExportExcel")
+    public void orderExportExcel(@RequestBody BaseSelectDto dto) {
+        orderService.orderExportExcel(dto.getId());
+    }
+
 }

+ 54 - 0
sd-business/src/main/java/com/sd/business/entity/order/vo/OrderSkuExportVo.java

@@ -0,0 +1,54 @@
+package com.sd.business.entity.order.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单sku 导出返回值实体
+ *
+ * @author
+ * @since 2023-11-14
+ */
+@Getter
+@Setter
+@ExcelIgnoreUnannotated
+public class OrderSkuExportVo {
+
+    /**
+     * E10订单号
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "E10订单号", index = 0)
+    private String wlnCode;
+
+    /**
+     * sku品号
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "SKU", index = 1)
+    private String skuSpecCode;
+
+    /**
+     * bom品号
+     */
+    @ColumnWidth(15)
+    @ExcelProperty(value = "bom品号", index = 2)
+    private String bomSpecCode;
+
+    /**
+     * 数量
+     */
+    @ExcelProperty(value = "业务数量", index = 3)
+    private BigDecimal quantity;
+
+    /**
+     * sku总金额
+     */
+    @ExcelProperty(value = "金额", index = 4)
+    private BigDecimal totalAmount;
+}

+ 1 - 1
sd-business/src/main/java/com/sd/business/service/apply/impl/ApplyBuyServiceImpl.java

@@ -135,7 +135,7 @@ public class ApplyBuyServiceImpl extends ServiceImpl<ApplyBuyMapper, ApplyBuy> i
         return result;
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void add(ApplyBuyDto dto) {
         Long applyBuyId = IdWorker.getId();

+ 7 - 0
sd-business/src/main/java/com/sd/business/service/inventory/InventoryFinishedOrderService.java

@@ -59,6 +59,13 @@ public interface InventoryFinishedOrderService extends BaseService<InventoryFini
     void erpExcelExport(List<InventoryFinishedErpImportDataDto> list);
 
     /**
+     * 订单售后入库
+     *
+     * @param orderSkuList 订单明细列表
+     */
+    void orderExchangeWarehousing(List<OrderSku> orderSkuList);
+
+    /**
      * 无源库存销售出库
      *
      * @param orderIdList

+ 18 - 0
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryFinishedOrderServiceImpl.java

@@ -226,6 +226,24 @@ public class InventoryFinishedOrderServiceImpl extends ServiceImpl<InventoryFini
     }
 
     @Override
+    public void orderExchangeWarehousing(List<OrderSku> orderSkuList) {
+        // 保存成品订单信息
+        List<InventoryFinishedOrder> list = orderSkuList.stream().map(item -> {
+            InventoryFinishedOrder inventoryFinishedOrder = new InventoryFinishedOrder();
+            inventoryFinishedOrder.setDepartmentId(DepartmentConstant.SD_SPORTS);
+            inventoryFinishedOrder.setSkuSpecId(item.getSkuSpecId());
+            inventoryFinishedOrder.setQuantity(item.getQuantity());
+            inventoryFinishedOrder.setStatus(StatusConstant.YES);
+            inventoryFinishedOrder.setExistingQuantity(item.getQuantity());
+            return inventoryFinishedOrder;
+        }).collect(Collectors.toList());
+        saveBatch(list);
+
+        // 添加流水记录
+        inventoryFinishedOrderDetailService.add(list, FinishedOperationTypeEnum.PRODUCTION_WAREHOUSING);
+    }
+
+    @Override
     public void noSourceSaleOutOfWarehouse(List<Long> orderIdList) {
         if (ObjectUtil.isEmpty(orderIdList)) {
             return;

+ 6 - 0
sd-business/src/main/java/com/sd/business/service/order/OrderService.java

@@ -156,4 +156,10 @@ public interface OrderService extends BaseService<OrderInfo> {
      * @return
      */
     List<OutBomVo> returnBomList(Long id);
+
+    /**
+     * 订单导出
+     * @param id
+     */
+    void orderExportExcel(Long id);
 }

+ 61 - 0
sd-business/src/main/java/com/sd/business/service/order/impl/OrderExchangeServiceImpl.java

@@ -11,9 +11,16 @@ import com.ruoyi.common.constant.StatusConstant;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.system.utils.UserUtil;
+import com.sd.business.entity.department.constant.DepartmentConstant;
 import com.sd.business.entity.department.po.Department;
+import com.sd.business.entity.in.dto.InOutStorageDto;
+import com.sd.business.entity.in.emums.InDetailTypeEnum;
+import com.sd.business.entity.in.emums.InOutTypeEnum;
+import com.sd.business.entity.in.po.InOutStorageBom;
+import com.sd.business.entity.inventory.po.InventoryFinished;
 import com.sd.business.entity.order.dto.OrderExchangeDto;
 import com.sd.business.entity.order.dto.OrderExchangeSelectDto;
 import com.sd.business.entity.order.enums.OrderClassifyEnum;
@@ -22,7 +29,11 @@ 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.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.order.OrderExchangeMapper;
+import com.sd.business.service.in.InOutStorageService;
+import com.sd.business.service.inventory.InventoryFinishedOrderService;
+import com.sd.business.service.inventory.InventoryFinishedService;
 import com.sd.business.service.order.*;
 import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.statement.StatementOfAccountService;
@@ -32,6 +43,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -64,6 +76,15 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
     @Autowired
     private StatementOfAccountService statementOfAccountService;
 
+    @Autowired
+    private InOutStorageService inOutStorageService;
+
+    @Autowired
+    private InventoryFinishedService inventoryFinishedService;
+
+    @Autowired
+    private InventoryFinishedOrderService inventoryFinishedOrderService;
+
     @Override
     public Page<OrderExchangeVo> getPage(OrderExchangeSelectDto dto) {
         IWrapper<OrderExchange> wrapper = getWrapper();
@@ -253,6 +274,46 @@ public class OrderExchangeServiceImpl extends ServiceImpl<OrderExchangeMapper, O
         statement.setDepartmentId(orderInfo.getDepartmentId());
         statement.setOrderIdList(Collections.singletonList(orderInfo.getId()));
         statementOfAccountService.add(statement);
+
+        // 售后商品入库
+        if (Objects.equals(orderExchangeDto.getWarehouseId(), WarehouseConstant.PRODUCTION_DEFECTIVE)) {
+            List<InOutStorageBom> tempInOutStorageBomList = orderSkuList.stream().map(item -> {
+                InOutStorageBom inStorageBom = new InOutStorageBom();
+                inStorageBom.setBomSpecId(item.getBomSpecId());
+                inStorageBom.setQuantity(item.getQuantity());
+                return inStorageBom;
+            }).collect(Collectors.toList());
+
+            // 合并相同bom规格出库数量
+            List<InOutStorageBom> inOutStorageBomList = new ArrayList<>(tempInOutStorageBomList.stream()
+                    .collect(Collectors.toMap(
+                        InOutStorageBom::getBomSpecId,
+                        Function.identity(),
+                        (v1, v2) -> {
+                            v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
+                            return v1;
+                        })).values());
+
+            InOutStorageDto inOutStorageDto = new InOutStorageDto();
+            inOutStorageDto.setType(InOutTypeEnum.IN.getKey());
+            inOutStorageDto.setDetailType(InDetailTypeEnum.ABANDON.getKey());
+            inOutStorageDto.setWarehouseId(orderExchangeDto.getWarehouseId());
+            inOutStorageDto.setDepartmentId(DepartmentConstant.SD_SPORTS);
+            inOutStorageDto.setApplicant(SecurityUtils.getLoginUser().getUser().getNickName());
+            inOutStorageDto.setRemark("订单:" + orderInfo.getCode() + "订单售后报废入库");
+            inOutStorageDto.setInOutStorageBomList(inOutStorageBomList);
+            inOutStorageService.add(inOutStorageDto);
+        } else {
+            // 生成无源成品信息,入成品库
+            List<InventoryFinished> inventoryFinishedList = orderSkuList.stream().map(item -> {
+                InventoryFinished inventoryFinished = new InventoryFinished();
+                inventoryFinished.setSkuSpecId(item.getSkuSpecId());
+                inventoryFinished.setQuantity(item.getQuantity());
+                return inventoryFinished;
+            }).collect(Collectors.toList());
+            inventoryFinishedService.inOut(inventoryFinishedList, true);
+            inventoryFinishedOrderService.orderExchangeWarehousing(orderSkuList);
+        }
     }
 
     @Override

+ 56 - 0
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -60,13 +60,16 @@ import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.business.util.CodeEnum;
 import com.sd.framework.util.Assert;
+import com.sd.framework.util.excel.util.ExcelUtil;
 import com.sd.mq.config.ArtworkConfig;
 import com.sd.mq.entity.TempArtworkMessage;
 import com.sd.mq.util.RabbitMqUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -137,6 +140,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     @Autowired
     private ProductionWorkOrderService productionWorkOrderService;
 
+    @Autowired
+    private HttpServletResponse response;
+
     @Override
     public Page<OrderInfoVo> getPage(OrderSelectDto dto) {
         IWrapper<OrderInfo> wrapper = getWrapper();
@@ -1162,6 +1168,56 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
     }
 
     /**
+     * 订单导出
+     * @param id
+     */
+    @Override
+    public void orderExportExcel(Long id) {
+        OrderInfo orderInfo = this.getById(id);
+        List<OrderSku> list = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, id));
+        List<Long> bomSpecIds = list.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
+        List<Long> skuSpecIds = list.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
+        Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIds);
+        Map<Long, SkuSpec> skuSpecMap = skuSpecService.byIdsToMap(skuSpecIds);
+        List<OrderSku> orderPackageSkuList = list.stream()
+                .filter(item -> !Objects.equals(bomSpecBoMap.get(item.getBomSpecId()).getClassifyParentId(), 1L))
+                .collect(Collectors.toList());
+        List<OrderSku> orderSkuList = list.stream()
+                .filter(item -> Objects.equals(bomSpecBoMap.get(item.getBomSpecId()).getClassifyParentId(), 1L))
+                .collect(Collectors.toList());
+        BigDecimal orderPackageSku = orderPackageSkuList.stream()
+                .map(item -> (item.getUnitPrice()
+                        .add(item.getCustomProcessingFee())
+                        .add(item.getLssueFee())
+                        .add(item.getDeliveryMaterialsFee())
+                        .add(item.getPackingLabor())
+                        .add(item.getPackagingMaterialCost())
+                        .add(item.getManagementFee()))
+                        .multiply(item.getQuantity()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal orderPackagePrice = orderPackageSku.divide(BigDecimal.valueOf(orderSkuList.size()), 2, RoundingMode.HALF_UP);
+        List<OrderSkuExportVo> exportVoList = orderSkuList.stream().map(item -> {
+            BigDecimal subtotal = item.getUnitPrice()
+                    .add(item.getCustomProcessingFee())
+                    .add(item.getLssueFee())
+                    .add(item.getDeliveryMaterialsFee())
+                    .add(item.getPackingLabor())
+                    .add(item.getPackagingMaterialCost())
+                    .add(item.getManagementFee());
+            BomSpecBo bomSpecBo = bomSpecBoMap.get(item.getBomSpecId());
+            SkuSpec skuSpec = skuSpecMap.get(item.getSkuSpecId());
+            OrderSkuExportVo orderSkuExportVo = new OrderSkuExportVo();
+            orderSkuExportVo.setWlnCode(orderInfo.getWlnCode());
+            orderSkuExportVo.setSkuSpecCode(skuSpec.getCode());
+            orderSkuExportVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
+            orderSkuExportVo.setQuantity(item.getQuantity());
+            orderSkuExportVo.setTotalAmount(subtotal.multiply(item.getQuantity()).add(orderPackagePrice));
+            return orderSkuExportVo;
+        }).collect(Collectors.toList());
+        ExcelUtil.export(response, exportVoList, OrderSkuExportVo.class);
+    }
+
+    /**
      * 删除订单以及订单关联数据
      */
     public void delete(Long id) {