浏览代码

销售出库明细

24282 1 年之前
父节点
当前提交
641e080552
共有 18 个文件被更改,包括 319 次插入86 次删除
  1. 3 3
      sd-business/src/main/java/com/sd/business/controller/statement/StatementOfAccountController.java
  2. 9 0
      sd-business/src/main/java/com/sd/business/controller/statement/StatementOfAccountMergeController.java
  3. 5 0
      sd-business/src/main/java/com/sd/business/entity/bom/bo/BomSpecBo.java
  4. 31 0
      sd-business/src/main/java/com/sd/business/entity/statement/dto/SalesOutWarehouseDetailsDto.java
  5. 50 5
      sd-business/src/main/java/com/sd/business/entity/statement/vo/DocumentByOrderVo.java
  6. 4 6
      sd-business/src/main/java/com/sd/business/service/inventory/InventoryService.java
  7. 5 4
      sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java
  8. 5 2
      sd-business/src/main/java/com/sd/business/service/sku/SkuSpecService.java
  9. 6 3
      sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java
  10. 6 0
      sd-business/src/main/java/com/sd/business/service/statement/StatementOfAccountMergeService.java
  11. 9 3
      sd-business/src/main/java/com/sd/business/service/statement/StatementOfAccountService.java
  12. 2 2
      sd-business/src/main/java/com/sd/business/service/statement/impl/StatementOfAccountExportServiceImpl.java
  13. 103 4
      sd-business/src/main/java/com/sd/business/service/statement/impl/StatementOfAccountMergeServiceImpl.java
  14. 37 16
      sd-business/src/main/java/com/sd/business/service/statement/impl/StatementOfAccountServiceImpl.java
  15. 1 1
      sd-business/src/main/java/com/sd/business/strategy/impl/DocumentByOrderExcelExportStrategy.java
  16. 2 1
      sd-business/src/main/resources/mapper/sku/SkuSpecMapper.xml
  17. 5 5
      sd-wln/src/main/java/com/sd/wln/context/OrderContext.java
  18. 36 31
      sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

+ 3 - 3
sd-business/src/main/java/com/sd/business/controller/statement/StatementOfAccountController.java

@@ -92,7 +92,7 @@ public class StatementOfAccountController {
      */
     @PostMapping("/getDocumentBySku")
     public List<DocumentBySkuVo> getDocumentBySku(@RequestBody BaseSelectDto dto) {
-        return statementOfAccountService.getDocumentBySku(Collections.singletonList(dto.getId()));
+        return statementOfAccountService.getSkuDocument(Collections.singletonList(dto.getId()));
     }
 
     /**
@@ -100,7 +100,7 @@ public class StatementOfAccountController {
      */
     @PostMapping("/getDocumentByBom")
     public List<DocumentByBomVo> getDocumentByBom(@RequestBody BaseSelectDto dto) {
-        return statementOfAccountService.getDocumentByBom(Collections.singletonList(dto.getId()));
+        return statementOfAccountService.getBomDocument(Collections.singletonList(dto.getId()));
     }
 
     /**
@@ -108,7 +108,7 @@ public class StatementOfAccountController {
      */
     @PostMapping("/getDocumentByOrder")
     public List<DocumentByOrderVo> getDocumentByOrder(@RequestBody BaseSelectDto dto) {
-        return statementOfAccountService.getDocumentByOrder(Collections.singletonList(dto.getId()));
+        return statementOfAccountService.getOrderDocument(Collections.singletonList(dto.getId()));
     }
 
     /**

+ 9 - 0
sd-business/src/main/java/com/sd/business/controller/statement/StatementOfAccountMergeController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.annotation.NonInterception;
 import com.sd.business.entity.statement.dto.ExportDocumentDto;
 import com.sd.business.entity.statement.dto.GetDocumentDto;
+import com.sd.business.entity.statement.dto.SalesOutWarehouseDetailsDto;
 import com.sd.business.entity.statement.dto.StatementOfAccountMergePageDto;
 import com.sd.business.entity.statement.vo.DocumentByBomVo;
 import com.sd.business.entity.statement.vo.DocumentByOrderVo;
@@ -90,4 +91,12 @@ public class StatementOfAccountMergeController {
         statementOfAccountMergeService.export(dto, 3);
     }
 
+    /**
+     * 销售出货明细
+     */
+    @PostMapping("/salesOutWarehouseDetails")
+    public Page<DocumentByOrderVo> salesOutWarehouseDetails(@RequestBody SalesOutWarehouseDetailsDto dto) {
+        return statementOfAccountMergeService.salesOutWarehouseDetails(dto);
+    }
+
 }

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/bom/bo/BomSpecBo.java

@@ -59,4 +59,9 @@ public class BomSpecBo {
      */
     private Long classifyParentId;
 
+    /**
+     * 单位
+     */
+    private String unit;
+
 }

+ 31 - 0
sd-business/src/main/java/com/sd/business/entity/statement/dto/SalesOutWarehouseDetailsDto.java

@@ -0,0 +1,31 @@
+package com.sd.business.entity.statement.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SalesOutWarehouseDetailsDto extends BaseSelectDto {
+
+    /**
+     * 订单号
+     */
+    private String code;
+
+    /**
+     * 事业部id
+     */
+    private Long departmentId;
+
+    /**
+     * sku编码
+     */
+    private String skuSpecCode;
+
+    /**
+     * sku名称
+     */
+    private String skuSpecName;
+
+}

+ 50 - 5
sd-business/src/main/java/com/sd/business/entity/statement/vo/DocumentByOrderVo.java

@@ -37,11 +37,6 @@ public class DocumentByOrderVo {
     private Integer placeholder;
 
     /**
-     * sku规格列表
-     */
-    private List<SkuSpec> skuSpecList;
-
-    /**
      * 外箱包装费
      */
     private BigDecimal outerBoxPackingFee;
@@ -51,6 +46,41 @@ public class DocumentByOrderVo {
      */
     private BigDecimal total;
 
+    /**
+     * 店铺来源
+     */
+    private String sourcePlatform;
+
+    /**
+     * 店铺名称
+     */
+    private String shopName;
+
+    /**
+     * 事业部id
+     */
+    private Long departmentId;
+
+    /**
+     * 事业部名称
+     */
+    private String departmentName;
+
+    /**
+     * 对账单id
+     */
+    private Long statementOfAccountId;
+
+    /**
+     * 对账时间
+     */
+    private Date statementOfAccountTime;
+
+    /**
+     * sku规格列表
+     */
+    private List<SkuSpec> skuSpecList;
+
     @Getter
     @Setter
     public static class SkuSpec {
@@ -137,6 +167,11 @@ public class DocumentByOrderVo {
         private BigDecimal unitPrice;
 
         /**
+         * 定制加工类型
+         */
+        private String customProcessingType;
+
+        /**
          * 激光logo
          */
         private BigDecimal laserLogoSummary;
@@ -166,6 +201,16 @@ public class DocumentByOrderVo {
          */
         private BigDecimal managementFeeSummary;
 
+        /**
+         * 分类父名称
+         */
+        private String classifyName;
+
+        /**
+         * 单位
+         */
+        private String unit;
+
     }
 
 }

+ 4 - 6
sd-business/src/main/java/com/sd/business/service/inventory/InventoryService.java

@@ -99,24 +99,22 @@ public interface InventoryService extends BaseService<Inventory> {
 
     /**
      * 采购入库
-     *
-     * @param
      */
     void purchaseInStorage(Long purchaseId, Long departmentId, Long warehouseId, List<InOutStorageBom> list);
 
     /**
      * 锁定库存
-     * @param map 操作bom数量信息
+     *
+     * @param map         操作bom数量信息
      * @param warehouseId 仓库id
-     * @return
      */
     boolean lockStorage(Map<Long, BigDecimal> map, Long warehouseId);
 
     /**
      * 解锁库存
-     * @param map 操作bom数量信息
+     *
+     * @param map         操作bom数量信息
      * @param warehouseId 仓库id
-     * @return
      */
     void unlockStorage(Map<Long, BigDecimal> map, Long warehouseId);
 

+ 5 - 4
sd-business/src/main/java/com/sd/business/service/inventory/impl/InventoryServiceImpl.java

@@ -325,11 +325,11 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
 
             inOutStorageDetailsService.saveBatch(addInOutStorageDetailsList);
 
-            if (addInventoryList.size() > 0) {
+            if (!addInventoryList.isEmpty()) {
                 saveBatch(addInventoryList);
             }
 
-            if (updateInventoryList.size() > 0) {
+            if (!updateInventoryList.isEmpty()) {
                 updateBatchById(updateInventoryList);
             }
 
@@ -350,7 +350,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
     @Override
     public boolean lockStorage(List<? extends OrderSku> orderSkuList) {
 
-        if (orderSkuList.size() == 0) {
+        if (orderSkuList.isEmpty()) {
             return true;
         }
 
@@ -388,7 +388,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
     @Override
     public void unlockStorage(List<OrderSku> orderSkuList) {
 
-        if (orderSkuList.size() == 0) {
+        if (orderSkuList.isEmpty()) {
             return;
         }
 
@@ -408,6 +408,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
                 inventory.setQuantity(inventory.getQuantity().add(lockQuantity));
                 inventory.setLockQuantity(inventory.getLockQuantity().subtract(lockQuantity));
             }
+
             updateBatchById(list);
         }
 

+ 5 - 2
sd-business/src/main/java/com/sd/business/service/sku/SkuSpecService.java

@@ -54,9 +54,12 @@ public interface SkuSpecService extends BaseService<SkuSpec> {
     Map<Long, BomSpecBo> getBomSpecBoByIdList(Collection<Long> bomSpecIdList);
 
     /**
+     * 根据sku规格id获取bomId和bom规格id
+     */
+    BomSpecBo getBomSpecBoById(Long bomSpecId);
+
+    /**
      * 获取sku的库存数量
-     * @param id
-     * @return
      */
     BigDecimal getSkuInventoryQuantity(Long id);
 }

+ 6 - 3
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecServiceImpl.java

@@ -15,7 +15,6 @@ import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.vo.SkuSpecVo;
 import com.sd.business.entity.warehouse.constant.WarehouseConstant;
 import com.sd.business.mapper.sku.SkuSpecMapper;
-import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.inventory.InventoryService;
 import com.sd.business.service.sku.SkuSpecService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,8 +39,6 @@ import java.util.stream.Collectors;
  */
 @Service
 public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> implements SkuSpecService {
-    @Autowired
-    private BomSpecService bomSpecService;
 
     @Autowired
     private InventoryService inventoryService;
@@ -95,6 +92,12 @@ public class SkuSpecServiceImpl extends ServiceImpl<SkuSpecMapper, SkuSpec> impl
     }
 
     @Override
+    public BomSpecBo getBomSpecBoById(Long bomSpecId) {
+        Map<Long, BomSpecBo> map = getBomSpecBoByIdList(Collections.singletonList(bomSpecId));
+        return map.get(bomSpecId);
+    }
+
+    @Override
     public BigDecimal getSkuInventoryQuantity(Long id) {
         SkuSpec skuSpec = this.getById(id);
         if (skuSpec == null) {

+ 6 - 0
sd-business/src/main/java/com/sd/business/service/statement/StatementOfAccountMergeService.java

@@ -3,6 +3,7 @@ package com.sd.business.service.statement;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sd.business.entity.statement.dto.ExportDocumentDto;
 import com.sd.business.entity.statement.dto.GetDocumentDto;
+import com.sd.business.entity.statement.dto.SalesOutWarehouseDetailsDto;
 import com.sd.business.entity.statement.dto.StatementOfAccountMergePageDto;
 import com.sd.business.entity.statement.vo.DocumentByBomVo;
 import com.sd.business.entity.statement.vo.DocumentByOrderVo;
@@ -49,4 +50,9 @@ public interface StatementOfAccountMergeService {
      */
     void export(ExportDocumentDto dto, int type);
 
+    /**
+     * 销售出货明细
+     */
+    Page<DocumentByOrderVo> salesOutWarehouseDetails(SalesOutWarehouseDetailsDto dto);
+
 }

+ 9 - 3
sd-business/src/main/java/com/sd/business/service/statement/StatementOfAccountService.java

@@ -2,6 +2,7 @@ package com.sd.business.service.statement;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.statement.dto.FileUploadDto;
 import com.sd.business.entity.statement.dto.StatementOfAccountDto;
 import com.sd.business.entity.statement.dto.StatementOfAccountSelectDto;
@@ -54,17 +55,22 @@ public interface StatementOfAccountService extends BaseService<StatementOfAccoun
     /**
      * sku对账
      */
-    List<DocumentBySkuVo> getDocumentBySku(List<Long> statementOfAccountId);
+    List<DocumentBySkuVo> getSkuDocument(List<Long> statementOfAccountId);
 
     /**
      * bom对账
      */
-    List<DocumentByBomVo> getDocumentByBom(List<Long> statementOfAccountId);
+    List<DocumentByBomVo> getBomDocument(List<Long> statementOfAccountId);
 
     /**
      * 订单对账
      */
-    List<DocumentByOrderVo> getDocumentByOrder(List<Long> statementOfAccountId);
+    List<DocumentByOrderVo> getOrderDocument(List<Long> statementOfAccountId);
+
+    /**
+     * 订单对账
+     */
+    List<DocumentByOrderVo> getOrderDocumentByOrderList(List<OrderInfo> orderList);
 
     /**
      * 导出

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/statement/impl/StatementOfAccountExportServiceImpl.java

@@ -28,7 +28,7 @@ public class StatementOfAccountExportServiceImpl implements StatementOfAccountEx
     @Override
     public void exportDocumentBySku(List<Long> idList, String departmentName, String beginDate, String endDate) {
 
-        List<DocumentBySkuVo> list = statementOfAccountService.getDocumentBySku(idList);
+        List<DocumentBySkuVo> list = statementOfAccountService.getSkuDocument(idList);
 
         Map<String, Object> map = new HashMap<>();
         map.put("department", StrUtil.isBlank(departmentName) ? StringPool.EMPTY : departmentName + StringPool.DASH);
@@ -43,7 +43,7 @@ public class StatementOfAccountExportServiceImpl implements StatementOfAccountEx
     @Override
     public void exportDocumentByBom(List<Long> idList, String departmentName, String beginDate, String endDate) {
 
-        List<DocumentByBomVo> list = statementOfAccountService.getDocumentByBom(idList);
+        List<DocumentByBomVo> list = statementOfAccountService.getBomDocument(idList);
 
         Map<String, Object> map = new HashMap<>();
         map.put("department", StrUtil.isBlank(departmentName) ? StringPool.EMPTY : departmentName + StringPool.DASH);

+ 103 - 4
sd-business/src/main/java/com/sd/business/service/statement/impl/StatementOfAccountMergeServiceImpl.java

@@ -3,16 +3,22 @@ package com.sd.business.service.statement.impl;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.PageUtils;
 import com.sd.business.entity.excel.enums.ExcelTypeEnum;
 import com.sd.business.entity.order.po.OrderInfo;
+import com.sd.business.entity.order.po.OrderSku;
+import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.statement.dto.ExportDocumentDto;
 import com.sd.business.entity.statement.dto.GetDocumentDto;
+import com.sd.business.entity.statement.dto.SalesOutWarehouseDetailsDto;
 import com.sd.business.entity.statement.dto.StatementOfAccountMergePageDto;
 import com.sd.business.entity.statement.po.StatementOfAccount;
 import com.sd.business.entity.statement.vo.DocumentByBomVo;
@@ -22,6 +28,8 @@ import com.sd.business.entity.statement.vo.StatementOfAccountMergePageVo;
 import com.sd.business.service.department.DepartmentService;
 import com.sd.business.service.excel.ExcelGenerateLogService;
 import com.sd.business.service.order.OrderService;
+import com.sd.business.service.order.OrderSkuService;
+import com.sd.business.service.sku.SkuSpecService;
 import com.sd.business.service.statement.StatementOfAccountExportService;
 import com.sd.business.service.statement.StatementOfAccountMergeService;
 import com.sd.business.service.statement.StatementOfAccountService;
@@ -32,6 +40,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -60,6 +69,11 @@ public class StatementOfAccountMergeServiceImpl implements StatementOfAccountMer
     @Autowired
     private ExcelGenerateLogService excelGenerateLogService;
 
+    @Autowired
+    private OrderSkuService orderSkuService;
+
+    @Autowired
+    private SkuSpecService skuSpecService;
 
     @Override
     public Page<StatementOfAccountMergePageVo> getPage(StatementOfAccountMergePageDto dto) {
@@ -114,7 +128,7 @@ public class StatementOfAccountMergeServiceImpl implements StatementOfAccountMer
         Page<Map<String, Object>> mapPage = statementOfAccountService.pageMaps(dto.getPage(), wrapper);
         Page<StatementOfAccountMergePageVo> page = PageUtils.copyPage(mapPage, StatementOfAccountMergePageVo.class);
         List<StatementOfAccountMergePageVo> records = page.getRecords();
-        if (records.size() == 0) {
+        if (records.isEmpty()) {
             return page;
         }
 
@@ -162,17 +176,17 @@ public class StatementOfAccountMergeServiceImpl implements StatementOfAccountMer
 
     @Override
     public List<DocumentBySkuVo> getDocumentBySku(GetDocumentDto dto) {
-        return statementOfAccountService.getDocumentBySku(getIdList(dto));
+        return statementOfAccountService.getSkuDocument(getIdList(dto));
     }
 
     @Override
     public List<DocumentByBomVo> getDocumentByBom(GetDocumentDto dto) {
-        return statementOfAccountService.getDocumentByBom(getIdList(dto));
+        return statementOfAccountService.getBomDocument(getIdList(dto));
     }
 
     @Override
     public List<DocumentByOrderVo> getDocumentByOrder(GetDocumentDto dto) {
-        return statementOfAccountService.getDocumentByOrder(getIdList(dto));
+        return statementOfAccountService.getOrderDocument(getIdList(dto));
     }
 
     @Override
@@ -205,6 +219,91 @@ public class StatementOfAccountMergeServiceImpl implements StatementOfAccountMer
         }
     }
 
+    @Override
+    public Page<DocumentByOrderVo> salesOutWarehouseDetails(SalesOutWarehouseDetailsDto dto) {
+
+        // 对账单条件查询
+        List<StatementOfAccount> statementOfAccountList = null;
+        List<Long> statementOfAccountIdList = null;
+
+        if (!ObjectUtil.isAllEmpty(dto.getBeginTime(), dto.getEndTime())) {
+            statementOfAccountList = statementOfAccountService.list(q -> q
+                    .ge(ObjectUtil.isNotNull(dto.getBeginTime()), BasePo::getCreateTime, dto.getBeginTime())
+                    .le(ObjectUtil.isNotNull(dto.getEndTime()), BasePo::getCreateTime, dto.getEndTime()));
+
+            if (statementOfAccountList.isEmpty()) {
+                return new Page<>();
+            }
+            statementOfAccountIdList = statementOfAccountList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        }
+
+        // sku条件查询
+        List<Long> orderIdList = null;
+        if (!StrUtil.isAllBlank(dto.getSkuSpecCode(), dto.getSkuSpecName())) {
+            List<SkuSpec> skuSpecList = skuSpecService.list(q -> q
+                    .like(StrUtil.isNotBlank(dto.getSkuSpecCode()), SkuSpec::getCode, dto.getSkuSpecCode())
+                    .like(StrUtil.isNotBlank(dto.getSkuSpecName()), SkuSpec::getName, dto.getSkuSpecName()));
+
+            if (skuSpecList.isEmpty()) {
+                return new Page<>();
+            }
+            List<Long> skuSpecIdList = skuSpecList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+
+            List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getSkuSpecId, skuSpecIdList));
+            if (orderSkuList.isEmpty()) {
+                return new Page<>();
+            }
+
+            orderIdList = orderSkuList.stream().map(OrderSku::getOrderId).collect(Collectors.toList());
+        }
+
+        // 查询订单分页
+        Page<OrderInfo> page = orderService.page(dto.getPage(), Wrappers.lambdaQuery(OrderInfo.class)
+                .in(ObjectUtil.isNotEmpty(orderIdList), BaseIdPo::getId, orderIdList)
+                .in(ObjectUtil.isNotEmpty(statementOfAccountIdList), OrderInfo::getStatementOfAccountId, statementOfAccountIdList)
+                .isNotNull(ObjectUtil.isEmpty(statementOfAccountIdList), OrderInfo::getStatementOfAccountId)
+                .eq(ObjectUtil.isNotNull(dto.getDepartmentId()), OrderInfo::getDepartmentId, dto.getDepartmentId())
+                .and(StrUtil.isNotBlank(dto.getCode()), q -> q
+                        .like(OrderInfo::getCode, dto.getCode()).or().like(OrderInfo::getWlnCode, dto.getCode()))
+                .orderByDesc(OrderInfo::getStatementOfAccountId)
+        );
+
+        List<OrderInfo> records = page.getRecords();
+
+        if (records.isEmpty()) {
+            return new Page<>();
+        }
+
+        // 赋值订单sku,包材
+        List<DocumentByOrderVo> orderDocumentByOrderList = statementOfAccountService.getOrderDocumentByOrderList(records);
+
+        // 赋值事业部名称
+        departmentService.attributeAssign(orderDocumentByOrderList, DocumentByOrderVo::getDepartmentId, (item, department) -> {
+            item.setDepartmentName(department.getName());
+        });
+
+        // 赋值对账时间
+        if (statementOfAccountList == null) {
+            statementOfAccountList = statementOfAccountService.listByIds(
+                    records.stream().map(OrderInfo::getStatementOfAccountId).collect(Collectors.toList()));
+        }
+        Map<Long, StatementOfAccount> map = statementOfAccountList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+
+        for (DocumentByOrderVo documentByOrderVo : orderDocumentByOrderList) {
+            Long statementOfAccountId = documentByOrderVo.getStatementOfAccountId();
+            StatementOfAccount statementOfAccount = map.get(statementOfAccountId);
+            documentByOrderVo.setStatementOfAccountTime(statementOfAccount.getCreateTime());
+        }
+
+        Page<DocumentByOrderVo> result = new Page<>();
+        result.setTotal(page.getTotal());
+        result.setRecords(orderDocumentByOrderList);
+        result.setPages(page.getPages());
+        result.setSize(page.getSize());
+
+        return result;
+    }
+
     private List<Long> getIdList(GetDocumentDto dto) {
 
         String idGroupConcat = dto.getIdGroupConcat();

+ 37 - 16
sd-business/src/main/java/com/sd/business/service/statement/impl/StatementOfAccountServiceImpl.java

@@ -15,6 +15,7 @@ import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.framework.config.ThreadPoolConfig;
+import com.sd.business.entity.bom.bo.BomSpecBo;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.excel.enums.ExcelTypeEnum;
 import com.sd.business.entity.order.po.OrderInfo;
@@ -106,7 +107,7 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
 
         Page<StatementOfAccountVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<StatementOfAccountVo> records = page.getRecords();
-        if (records.size() == 0) {
+        if (records.isEmpty()) {
             return page;
         }
 
@@ -249,12 +250,12 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
     }
 
     @Override
-    public List<DocumentBySkuVo> getDocumentBySku(List<Long> statementOfAccountIdList) {
+    public List<DocumentBySkuVo> getSkuDocument(List<Long> statementOfAccountIdList) {
 
         // 获取订单id列表
         List<Long> orderIdList = getOrderIdList(statementOfAccountIdList);
 
-        if (orderIdList.size() == 0) {
+        if (orderIdList.isEmpty()) {
             return Collections.emptyList();
         }
 
@@ -314,14 +315,14 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
     }
 
     @Override
-    public List<DocumentByBomVo> getDocumentByBom(List<Long> statementOfAccountIdList) {
+    public List<DocumentByBomVo> getBomDocument(List<Long> statementOfAccountIdList) {
 
         // 获取订单id列表
         List<Long> orderIdList = getOrderIdList(statementOfAccountIdList);
-
-        if (orderIdList.size() == 0) {
+        if (orderIdList.isEmpty()) {
             return Collections.emptyList();
         }
+
         // 查询委外订单
         Map<Long, OrderInfo> map = orderService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, orderIdList).eq(OrderInfo::getType, 2));
 
@@ -436,11 +437,17 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
     }
 
     @Override
-    public List<DocumentByOrderVo> getDocumentByOrder(List<Long> statementOfAccountId) {
+    public List<DocumentByOrderVo> getOrderDocument(List<Long> statementOfAccountId) {
 
         Assert.notEmpty(statementOfAccountId, "对账单id不能为空");
         List<OrderInfo> orderList = orderService.list(q -> q.in(OrderInfo::getStatementOfAccountId, statementOfAccountId));
-        if (orderList.size() == 0) {
+
+        return getOrderDocumentByOrderList(orderList);
+    }
+
+    @Override
+    public List<DocumentByOrderVo> getOrderDocumentByOrderList(List<OrderInfo> orderList) {
+        if (orderList.isEmpty()) {
             return Collections.emptyList();
         }
 
@@ -452,6 +459,12 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
             documentByOrderVo.setWlnCode(item.getWlnCode());
             documentByOrderVo.setOuterBoxPackingFee(item.getOuterBoxPackingFee());
             documentByOrderVo.setTotal(item.getTotalAmount());
+
+            documentByOrderVo.setSourcePlatform(item.getSourcePlatform());
+            documentByOrderVo.setShopName(item.getShopName());
+            documentByOrderVo.setDepartmentId(item.getDepartmentId());
+            documentByOrderVo.setStatementOfAccountId(item.getStatementOfAccountId());
+
             return documentByOrderVo;
         }).collect(Collectors.toList());
 
@@ -489,9 +502,7 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
         // 订单赋值sku
         Map<Long, List<DocumentByOrderVo.SkuSpec>> skuSpecMap = skuSpecList.stream()
                 .collect(Collectors.groupingBy(DocumentByOrderVo.SkuSpec::getOrderId));
-        for (DocumentByOrderVo documentByOrderVo : result) {
-            documentByOrderVo.setSkuSpecList(skuSpecMap.getOrDefault(documentByOrderVo.getOrderId(), Collections.emptyList()));
-        }
+        result.forEach(item -> item.setSkuSpecList(skuSpecMap.getOrDefault(item.getOrderId(), Collections.emptyList())));
 
         return result;
     }
@@ -596,6 +607,7 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
         // 查询委外订单
         Map<Long, OrderInfo> orderMap = orderService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, orderIdList).eq(OrderInfo::getType, 2));
 
+        // 主材
         List<DocumentByOrderVo.BomSpec> bomSpecList = orderSkuList.stream()
                 .map(item -> {
                     DocumentByOrderVo.BomSpec bomSpec = new DocumentByOrderVo.BomSpec();
@@ -605,6 +617,7 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
                     bomSpec.setQuantity(ObjectUtil.isNotEmpty(orderMap.get(item.getOrderId()))
                             ? BigDecimal.ZERO : item.getQuantity());
                     bomSpec.setUnitPrice(item.getUnitPrice());
+                    bomSpec.setCustomProcessingType(item.getCustomProcessingType());
                     bomSpec.setLaserLogoSummary((Objects.equals(item.getCustomProcessingType(), "20")
                             ? item.getCustomProcessingFee() : BigDecimal.ZERO));
                     bomSpec.setLaserMitochondrialSummary((Objects.equals(item.getCustomProcessingType(), "10")
@@ -620,8 +633,8 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
         Map<Long, BigDecimal> map = bomSpecList.stream().collect(
                 Collectors.toMap(DocumentByOrderVo.BomSpec::getOrderSkuId, DocumentByOrderVo.BomSpec::getQuantity));
 
+        // 包材
         List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderId, orderIdList));
-
         List<DocumentByOrderVo.BomSpec> packBomSpecList = orderSkuBomList.stream()
                 .map(item -> {
                     DocumentByOrderVo.BomSpec bomSpec = new DocumentByOrderVo.BomSpec();
@@ -634,12 +647,20 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
                 .peek(item -> item.setQuantity(ObjectUtil.equals(map.get(item.getOrderSkuId()), BigDecimal.ZERO) ? item.getQuantity() : map.get(item.getOrderSkuId()).multiply(item.getQuantity())))
                 .collect(Collectors.toList());
 
+        // 赋值
         bomSpecList.addAll(packBomSpecList);
 
-        bomSpecService.attributeAssign(bomSpecList, DocumentByOrderVo.BomSpec::getBomSpecId, (item, bomSpec) -> {
-            item.setBomSpecCode(bomSpec.getCode());
-            item.setBomSpecName(bomSpec.getName());
-        });
+        List<Long> bomSpecIdList = bomSpecList.stream().map(DocumentByOrderVo.BomSpec::getBomSpecId).collect(Collectors.toList());
+        Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIdList);
+
+        for (DocumentByOrderVo.BomSpec bomSpec : bomSpecList) {
+            BomSpecBo bomSpecBo = bomSpecBoMap.get(bomSpec.getBomSpecId());
+
+            bomSpec.setBomSpecCode(bomSpecBo.getBomSpecCode());
+            bomSpec.setBomSpecName(bomSpecBo.getBomSpecName());
+            bomSpec.setClassifyName(bomSpecBo.getClassifyName());
+            bomSpec.setUnit(bomSpecBo.getUnit());
+        }
 
         return bomSpecList;
     }

+ 1 - 1
sd-business/src/main/java/com/sd/business/strategy/impl/DocumentByOrderExcelExportStrategy.java

@@ -53,7 +53,7 @@ public class DocumentByOrderExcelExportStrategy implements ExcelExportStrategy<M
 
     @Override
     public Map<String, Object> getData() {
-        list = statementOfAccountService.getDocumentByOrder(idList);
+        list = statementOfAccountService.getOrderDocument(idList);
 
         BigDecimal all = BigDecimal.ZERO;
 

+ 2 - 1
sd-business/src/main/resources/mapper/sku/SkuSpecMapper.xml

@@ -34,7 +34,8 @@
                ifnull(bs.external_selling_price, '0.00') externalSellingPrice,
                bc.id                                     classifyId,
                bc.parent_id                              classifyParentId,
-               bc.name                                   classifyName
+               bc.name classifyName,
+               b.unit
         FROM bom_spec bs
                  LEFT JOIN bom b ON bs.bom_id = b.id
                  LEFT JOIN bom_classify bc on b.bom_classify_id = bc.id

+ 5 - 5
sd-wln/src/main/java/com/sd/wln/context/OrderContext.java

@@ -154,7 +154,7 @@ public class OrderContext {
     public Map<Long, List<OrderSku>> getExistOrderSkuMap() {
         if (existOrderSkuMap == null) {
             List<Long> orderIdList = getExistOrderMap().values().stream().map(BaseIdPo::getId).collect(Collectors.toList());
-            if (orderIdList.size() == 0) {
+            if (orderIdList.isEmpty()) {
                 existOrderSkuMap = Collections.emptyMap();
             } else {
                 existOrderSkuMap = orderSkuService.mapKGroup(OrderSku::getOrderId, q -> q.in(OrderSku::getOrderId, orderIdList));
@@ -175,7 +175,7 @@ public class OrderContext {
                     .distinct()
                     .collect(Collectors.toList());
 
-            if (wlnSkuSpecUidList.size() == 0) {
+            if (wlnSkuSpecUidList.isEmpty()) {
                 skuSpecMap = Collections.emptyMap();
             } else {
                 skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getWlnUid, q -> q.in(SkuSpec::getWlnUid, wlnSkuSpecUidList));
@@ -197,7 +197,7 @@ public class OrderContext {
             }
 
             Collection<SkuSpec> values = getSkuSpecMap().values();
-            if (values.size() == 0) {
+            if (values.isEmpty()) {
                 skuSpecLinkBomSpecMap = Collections.emptyMap();
                 return skuSpecLinkBomSpecMap;
             }
@@ -220,8 +220,8 @@ public class OrderContext {
                     .collect(Collectors.toList());
 
             List<SkuSpecLink> list = skuSpecLinkService.list(q -> q
-                    .and(skuSpecId.size() > 0, r -> r.in(SkuSpecLink::getSkuSpecId, skuSpecId).eq(SkuSpecLink::getDepartmentId, department.getId()))
-                    .or(skSkuSpecId.size() > 0, r -> r.in(SkuSpecLink::getSkuSpecId, skSkuSpecId).eq(SkuSpecLink::getDepartmentId, 100L))
+                    .and(!skuSpecId.isEmpty(), r -> r.in(SkuSpecLink::getSkuSpecId, skuSpecId).eq(SkuSpecLink::getDepartmentId, department.getId()))
+                    .or(!skSkuSpecId.isEmpty(), r -> r.in(SkuSpecLink::getSkuSpecId, skSkuSpecId).eq(SkuSpecLink::getDepartmentId, 100L))
             );
 
             skuSpecLinkBomSpecMap = list.stream().collect(

+ 36 - 31
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -92,33 +92,34 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         }
 
         for (DictCommonData dictCommonData : warehouseCodeList) {
+
+            // 获取事业部编号
             String warehouseCode = dictCommonData.getDictValue();
+
+            // 查询事业部万里牛订单
             List<JSONObject> wlnOrderList = getWlnOrderList(warehouseCode);
 
-            // 万里牛订单若为0,结束同步任务
+            // 万里牛订单数量若为0,结束同步任务
             if (ObjectUtil.isEmpty(wlnOrderList)) {
                 continue;
             }
 
+            // 初始化订单上下文
             OrderContext context = new OrderContext(warehouseCode, wlnOrderList);
 
+            // 获取已存在订单
             Map<String, OrderInfo> existOrderMap = context.getExistOrderMap();
 
             // 循环万里牛订单
             for (JSONObject wlnOrder : wlnOrderList) {
 
-                Date printTime = wlnOrder.getDate("print_time");
-                if (printTime != null && printTime.before(DateUtil.parse("2023-09-01 00:00:00"))) {
-                    continue;
-                }
-
                 // 数据库中是否存在订单
                 OrderInfo orderInfo = existOrderMap.get(wlnOrder.getString("uid"));
 
                 // 不存在新增
                 if (orderInfo == null) {
 
-                    // 审核通过之前的订单不同步
+                    // 审核通过之前或预售状态的订单不同步
                     Integer processStatus = wlnOrder.getInteger("process_status");
                     if (processStatus < 1 || processStatus == 14) {
                         continue;
@@ -570,6 +571,7 @@ public class WlnOrderServiceImpl implements WlnOrderService {
      */
     private void addExceptionType(OrderInfo orderInfo, OrderExceptionTypeEnum exceptionTypeEnum) {
 
+        // 生产中之后的订单不变为异常
         if (orderInfo.getStatus() != null && orderInfo.getStatus() >= OrderStatusEnum.IN_PRODUCTION.getKey()) {
             return;
         }
@@ -633,12 +635,13 @@ public class WlnOrderServiceImpl implements WlnOrderService {
 
             OrderInfo orderInfo = orderMap.get(orderId);
 
-            boolean result = inventoryService.lockStorage(orderSkuList);
+            boolean lockStorageFlag = inventoryService.lockStorage(orderSkuList);
 
-            if (!result) {
-                addExceptionType(orderInfo, OrderExceptionTypeEnum.UNDERSTOCK);
-            } else {
+            if (lockStorageFlag) {
                 orderInfo.setLockStorage(StatusConstant.YES);
+            } else {
+                orderInfo.setLockStorage(StatusConstant.NO);
+                addExceptionType(orderInfo, OrderExceptionTypeEnum.UNDERSTOCK);
             }
 
         });
@@ -651,30 +654,32 @@ public class WlnOrderServiceImpl implements WlnOrderService {
         Map<Long, List<OrderSku>> existOrderSkuMap = context.getExistOrderSkuMap();
         Map<Long, BomSpecBo> bomSpecBoMap = context.getBomSpecBoMap();
 
-        for (OrderInfo orderInfo : updateOrderList) {
-            if (ObjectUtil.notEqual(orderInfo.getExceptionType(), OrderExceptionTypeEnum.NORMAL.getKey().toString()) &&
-                    ObjectUtil.equal(orderInfo.getLockStorage(), StatusConstant.YES)) {
-
-                List<OrderSku> orderSkuList = existOrderSkuMap.get(orderInfo.getId())
-                        .stream()
-                        .filter(item -> {
-                            Long bomSpecId = item.getBomSpecId();
-                            BomSpecBo bomSpecBo = bomSpecBoMap.get(bomSpecId);
-                            if (bomSpecBo == null) {
-                                Map<Long, BomSpecBo> tempMap = skuSpecService.getBomSpecBoByIdList(Collections.singletonList(bomSpecId));
-                                bomSpecBo = tempMap.get(bomSpecId);
-                                bomSpecBoMap.put(bomSpecId, bomSpecBo);
-                            }
-                            return Objects.equals(bomSpecBo.getClassifyParentId(), 1L);
-                        })
-                        .collect(Collectors.toList());
-
-                inventoryService.unlockStorage(orderSkuList);
+        List<OrderSku> unlockStorageOrderSkuList = new ArrayList<>();
 
-                orderInfo.setLockStorage(StatusConstant.NO);
+        for (OrderInfo orderInfo : updateOrderList) {
+            if (ObjectUtil.equal(orderInfo.getExceptionType(), OrderExceptionTypeEnum.NORMAL.getKey().toString())
+                    || ObjectUtil.equal(orderInfo.getLockStorage(), StatusConstant.NO)) {
+                return;
             }
+
+            List<OrderSku> orderSkuList = existOrderSkuMap.get(orderInfo.getId())
+                    .stream()
+                    .filter(item -> {
+                        Long bomSpecId = item.getBomSpecId();
+                        BomSpecBo bomSpecBo = bomSpecBoMap.get(bomSpecId);
+                        if (bomSpecBo == null) {
+                            bomSpecBo = skuSpecService.getBomSpecBoById(bomSpecId);
+                            bomSpecBoMap.put(bomSpecId, bomSpecBo);
+                        }
+                        return Objects.equals(bomSpecBo.getClassifyParentId(), 1L);
+                    })
+                    .collect(Collectors.toList());
+
+            unlockStorageOrderSkuList.addAll(orderSkuList);
+            orderInfo.setLockStorage(StatusConstant.NO);
         }
 
+        inventoryService.unlockStorage(unlockStorageOrderSkuList);
     }
 
     /**