Browse Source

导出单据优化

dfsfs 1 year ago
parent
commit
2fb499d619
22 changed files with 283 additions and 100 deletions
  1. 50 21
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/doc/BionutritionDocHeaderController.java
  2. 2 2
      ruoyi-common/src/main/java/com/ruoyi/common/core/bean/dto/WarewmsExtDTO.java
  3. 5 5
      ruoyi-common/src/main/java/com/ruoyi/common/core/bean/entity/WarewmsExtEntity.java
  4. 2 2
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  5. 6 6
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
  6. 2 2
      ruoyi-ui/src/views/wms/docAsn/index.vue
  7. 5 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/domain/BionutritionDocDetails.java
  8. 5 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/BionutritionDocDetailsDTO.java
  9. 21 0
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/DocExcelQueryDTO.java
  10. 5 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/detail/ProductionPickingReceiptDetailsDTO.java
  11. 5 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/detail/PurchaseOrderDetailsDTO.java
  12. 5 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/detail/PurchaseReceiptDetailsDTO.java
  13. 0 4
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/BionutritionDocDetailsBaseExcel.java
  14. 3 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/ProductionPickingReceiptDetailsExcel.java
  15. 3 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/PurchaseOrderDetailsExcel.java
  16. 3 1
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/PurchaseReceiptDetailsExcel.java
  17. 6 6
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/BionutritionDocDetailsService.java
  18. 10 3
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/BionutritionDocHeaderService.java
  19. 26 31
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/impl/BionutritionDocDetailsServiceImpl.java
  20. 107 8
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/impl/BionutritionDocHeaderServiceImpl.java
  21. 11 2
      warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/util/BionutritionDocUtil.java
  22. 1 0
      warewms-ams/src/main/resources/mapper/doc/BionutritionDocHeaderMapper.xml

+ 50 - 21
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/doc/BionutritionDocHeaderController.java

@@ -1,11 +1,16 @@
 package com.ruoyi.web.controller.warewms.doc;
 
+import cn.hutool.core.lang.Assert;
 import com.github.pagehelper.PageInfo;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocBaseDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocDetailsDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocHeaderDTO;
+import com.ruoyi.ams.bionutrition.doc.dto.DocExcelQueryDTO;
+import com.ruoyi.ams.bionutrition.doc.excel.BionutritionDocBaseExcel;
+import com.ruoyi.ams.bionutrition.doc.excel.header.BionutritionDocHeaderBaseExcel;
 import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocDetailsService;
 import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocHeaderService;
+import com.ruoyi.ams.bionutrition.doc.util.BionutritionDocUtil;
 import com.ruoyi.base.constant.type.BizEnum;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
@@ -14,13 +19,17 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Slf4j
 @RestController
@@ -35,7 +44,7 @@ public class BionutritionDocHeaderController extends BaseController {
     /**
      * 查询单据头分页列表
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:list')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:list')")
     @GetMapping("/list")
     public TableDataInfo list(BionutritionDocHeaderDTO docHeaderDTO) {
         PageUtils.startPage();
@@ -46,7 +55,7 @@ public class BionutritionDocHeaderController extends BaseController {
     /**
      * 根据单号获取单据信息
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:query')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:query')")
     @GetMapping(value = "/{docNo}")
     public AjaxResult getInfo(@PathVariable("docNo") String docNo)
     {
@@ -56,18 +65,20 @@ public class BionutritionDocHeaderController extends BaseController {
     /**
      * 新增单据头
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:add')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:add')")
     @Log(title = "新增单据头", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody BionutritionDocHeaderDTO docHeaderDTO)
     {
-        return toAjax(bionutritionDocHeaderService.insertDocHeader(docHeaderDTO));
+        String result = bionutritionDocHeaderService.insertDocHeader(docHeaderDTO);
+        docHeaderDTO.setId(result);
+        return Long.valueOf(result) > 0 ? AjaxResult.success(docHeaderDTO) : AjaxResult.error();
     }
 
     /**
      * 修改单据头
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:edit')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:edit')")
     @Log(title = "修改单据头", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody BionutritionDocHeaderDTO docHeaderDTO)
@@ -78,7 +89,7 @@ public class BionutritionDocHeaderController extends BaseController {
     /**
      * 根据id删除单据
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:remove')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:remove')")
     @Log(title = "删除单据头", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable String[] ids)
@@ -89,50 +100,58 @@ public class BionutritionDocHeaderController extends BaseController {
     /**
      * 导出单据列表
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:export')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:export')")
     @Log(title = "导出单据", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public List<BionutritionDocBaseDTO> export(HttpServletResponse response, String[] ids, BionutritionDocHeaderDTO docHeaderDTO) {
-
-        List<BionutritionDocBaseDTO> list = StringUtils.isNotBlank(docHeaderDTO.getDocType()) ?
-                bionutritionDocHeaderService.getDocList(docHeaderDTO) : bionutritionDocHeaderService.getDicListByIds(ids);
-        /*ExcelUtil<BionutritionDocBaseDTO> util = new ExcelUtil<BionutritionDocBaseDTO>(BionutritionDocBaseDTO.class);
-        util.exportExcel(response, list, "入库单数据");*/
-        return list;
+    public void export(HttpServletResponse response, DocExcelQueryDTO docExcelQueryDTO) {
+
+
+/*        docBaseExcels.forEach(item->{
+            Class<? extends BionutritionDocHeaderBaseExcel> aClass = item.getBionutritionDocHeaderBaseExcelDTO().getClass();
+            System.out.println(aClass.getCanonicalName());
+            Field[] declaredFields = aClass.getDeclaredFields();
+            for (Field declaredField : declaredFields) {
+                System.out.println("===="+declaredField+"====");
+            }
+        });*/
+        bionutritionDocHeaderService.exportExcel(response,docExcelQueryDTO);
+        /*ExcelUtil<BionutritionDocBaseExcel> util = new ExcelUtil<BionutritionDocBaseExcel>(BionutritionDocBaseExcel.class);
+        util.exportExcel(response, docBaseExcels, "单据", docExcelQueryDTO.getDocType());*/
     }
 
     /**
      * 导出采购单列表
      */
 //    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:export')")
-    @Log(title = "导出采购单", businessType = BusinessType.EXPORT)
+/*    @Log(title = "导出采购单", businessType = BusinessType.EXPORT)
     @PostMapping("/purchase/export")
     public void purchaseExport(HttpServletResponse response, BionutritionDocHeaderDTO docHeaderDTO) {
 
         docHeaderDTO.setDocType(BizEnum.BionutritionHeaderDocTypeEnum.PURCHASE_ORDER.getDocType());
         List<BionutritionDocBaseDTO> docList = bionutritionDocHeaderService.getDocList(docHeaderDTO);
         log.info("---{}",docList);
-        /*ExcelUtil<PurchaseOrderExcel> exportUtil = new ExcelUtil<>(PurchaseOrderExcel.class);
-        exportUtil.exportExcel(response, excelList, "采购单", "采购单");*/
-    }
+        *//*ExcelUtil<PurchaseOrderExcel> exportUtil = new ExcelUtil<>(PurchaseOrderExcel.class);
+        exportUtil.exportExcel(response, excelList, "采购单", "采购单");*//*
+    }*/
 
     /********************************** 单据明细 *********************************************/
 
     /**
      * 新增单据明细
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:add')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:add')")
     @Log(title = "添加单据明细", businessType = BusinessType.INSERT)
     @PostMapping("/addDocDetails")
     public AjaxResult addDetails(@RequestBody BionutritionDocDetailsDTO docDetailsDTO)
     {
+//        Assert.isTrue(StringUtils.isNotBlank(docDetailsDTO.getDocLineNo()));
         return toAjax(bionutritionDocDetailsService.insertDocDetails(docDetailsDTO));
     }
 
     /**
      * 修改单据明细
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:edit')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:edit')")
     @Log(title = "修改单据明细", businessType = BusinessType.UPDATE)
     @PutMapping("/editDocDetails")
     public AjaxResult editDetails(@RequestBody BionutritionDocDetailsDTO docDetailsDTO)
@@ -143,13 +162,23 @@ public class BionutritionDocHeaderController extends BaseController {
     /**
      * 根据单头id和行号获取单据明细信息
      */
-//    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:query')")
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:query')")
     @GetMapping("/queryDocDetailsInfo")
     public AjaxResult getDetailsByLineNo(@RequestParam String docHeaderId, @RequestParam String docLineNo)
     {
         return AjaxResult.success(bionutritionDocDetailsService.selectDocDetailsByLineNo(docHeaderId,docLineNo));
     }
 
+    /**
+     * 根据id获取单据明细信息
+     */
+    @PreAuthorize("@ss.hasPermi('docAsn:docAsn:query')")
+    @GetMapping("/queryDocDetailsInfo/{id}")
+    public AjaxResult getDetailsById(@PathVariable String id)
+    {
+        return AjaxResult.success(bionutritionDocDetailsService.selectById(id));
+    }
+
     /**
      * 根据明细id删除明细
      * @param ids

+ 2 - 2
ruoyi-common/src/main/java/com/ruoyi/common/core/bean/dto/WarewmsExtDTO.java

@@ -12,11 +12,11 @@ public class WarewmsExtDTO extends WarewmsDTO {
 
     private String id;
 
-    private Long creator;
+    private String creator;
 
     private Date createDate;
 
-    private Long updater;
+    private String updater;
 
     private Date updateDate;
 

+ 5 - 5
ruoyi-common/src/main/java/com/ruoyi/common/core/bean/entity/WarewmsExtEntity.java

@@ -16,19 +16,19 @@ public class WarewmsExtEntity extends WarewmsEntity {
 
     private static final long serialVersionUID = 5454051931854654410L;
 
-//    @TableId
+    @TableId
     private String id;
 
-//    @TableField(fill = FieldFill.INSERT)
+    @TableField(fill = FieldFill.INSERT)
     private String creator;
 
-//    @TableField(fill = FieldFill.INSERT)
+    @TableField(fill = FieldFill.INSERT)
     private Date createDate;
 
-//    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private String updater;
 
-//    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private Date updateDate;
 
     private String remark;

+ 2 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -118,9 +118,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 库位视图
                 .antMatchers("/ams/locationView/**").permitAll()
                 // 除上面外的所有请求全部需要鉴权认证
-                /*.anyRequest().authenticated()
+                .anyRequest().authenticated()
                 .and()
-                .headers().frameOptions().disable()*/;
+                .headers().frameOptions().disable();
         httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
         // 添加JWT filter
         httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);

+ 6 - 6
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java

@@ -95,10 +95,10 @@ public class PermissionService
     {
         if (StringUtils.isEmpty(role))
         {
-//            return false;
-            return true;
+            return false;
+//            return true;
         }
-        /*LoginUser loginUser = SecurityUtils.getLoginUser();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
         if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles()))
         {
             return false;
@@ -110,9 +110,9 @@ public class PermissionService
             {
                 return true;
             }
-        }*/
-//        return false;
-        return true;
+        }
+        return false;
+//        return true;
     }
 
     /**

+ 2 - 2
ruoyi-ui/src/views/wms/docAsn/index.vue

@@ -213,7 +213,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         asnNo: null,
-        asnType: null,
+        docType: 'PurchaseOrder',
         asnStatus: null,
         asnReference1: null,
         asnReference2: null,
@@ -434,7 +434,7 @@ export default {
     },
     /** 导出按钮操作 */
     handleExport() {
-      this.download('docAsn/docAsn/export', {
+      this.download('/docHeader/docHeader/export', {
         ...this.queryParams
       }, `docAsn_${new Date().getTime()}.xlsx`)
     },

+ 5 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/domain/BionutritionDocDetails.java

@@ -1,11 +1,14 @@
 package com.ruoyi.ams.bionutrition.doc.domain;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.bean.entity.WarewmsExtEntity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.Date;
+
 @Data
 @EqualsAndHashCode(callSuper = true)
 @TableName("bsl_doc_details")
@@ -42,7 +45,8 @@ public class BionutritionDocDetails extends WarewmsExtEntity {
     private String measureUnit;
 
     @ApiModelProperty("生产日期")
-    private String manufactureDate;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date manufactureDate;
 
     @ApiModelProperty("收货人")
     private String receiver;

+ 5 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/BionutritionDocDetailsDTO.java

@@ -1,9 +1,12 @@
 package com.ruoyi.ams.bionutrition.doc.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.bean.dto.WarewmsExtDTO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 @Data
 public class BionutritionDocDetailsDTO extends WarewmsExtDTO {
 
@@ -38,7 +41,8 @@ public class BionutritionDocDetailsDTO extends WarewmsExtDTO {
     private String measureUnit;
 
     @ApiModelProperty("生产日期")
-    private String manufactureDate;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date manufactureDate;
 
     @ApiModelProperty("收货人")
     private String receiver;

+ 21 - 0
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/DocExcelQueryDTO.java

@@ -0,0 +1,21 @@
+package com.ruoyi.ams.bionutrition.doc.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class DocExcelQueryDTO implements Serializable {
+
+    private static final long serialVersionUID = 4859167206960471602L;
+
+    @ApiModelProperty("单据头id")
+    private String[] ids;
+
+    @ApiModelProperty("单据类型")
+    private String docType;
+
+    @ApiModelProperty("业务类型 出库/入库")
+    private String businessType;
+}

+ 5 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/detail/ProductionPickingReceiptDetailsDTO.java

@@ -1,8 +1,11 @@
 package com.ruoyi.ams.bionutrition.doc.dto.detail;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 生产领料单明细
  */
@@ -19,6 +22,7 @@ public class ProductionPickingReceiptDetailsDTO extends BionutritionDocDetailsBa
     private String measureUnit;
 
     @ApiModelProperty("生产日期")
-    private String manufactureDate;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date manufactureDate;
 
 }

+ 5 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/detail/PurchaseOrderDetailsDTO.java

@@ -1,8 +1,11 @@
 package com.ruoyi.ams.bionutrition.doc.dto.detail;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 采购单明细
  */
@@ -19,7 +22,8 @@ public class PurchaseOrderDetailsDTO extends BionutritionDocDetailsBaseDTO {
     private String measureUnit;
 
     @ApiModelProperty("生产日期")
-    private String manufactureDate;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date manufactureDate;
 
     @ApiModelProperty("含税价")
     private String priceIncludeTax;

+ 5 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/dto/detail/PurchaseReceiptDetailsDTO.java

@@ -1,8 +1,11 @@
 package com.ruoyi.ams.bionutrition.doc.dto.detail;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 采购收货单明细
  */
@@ -20,7 +23,8 @@ public class PurchaseReceiptDetailsDTO extends BionutritionDocDetailsBaseDTO {
     private String measureUnit;
 
     @ApiModelProperty("生产日期")
-    private String manufactureDate;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date manufactureDate;
 
     @ApiModelProperty("含税价")
     private String priceIncludeTax;

+ 0 - 4
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/BionutritionDocDetailsBaseExcel.java

@@ -8,10 +8,6 @@ import lombok.Data;
 @Data
 public class BionutritionDocDetailsBaseExcel extends WarewmsExtDTO {
 
-    private static final long serialVersionUID = 1102255580263279150L;
-
-    private String docHeaderId;
-
     @Excel(name = "明细行号")
     private String docLineNo;
 

+ 3 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/ProductionPickingReceiptDetailsExcel.java

@@ -5,6 +5,8 @@ import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 生产领料单明细
  */
@@ -21,6 +23,6 @@ public class ProductionPickingReceiptDetailsExcel extends BionutritionDocDetails
     private String measureUnit;
 
     @Excel(name = "生产日期")
-    private String manufactureDate;
+    private Date manufactureDate;
 
 }

+ 3 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/PurchaseOrderDetailsExcel.java

@@ -5,6 +5,8 @@ import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 采购单明细
  */
@@ -21,7 +23,7 @@ public class PurchaseOrderDetailsExcel extends BionutritionDocDetailsBaseExcel {
     private String measureUnit;
 
     @Excel(name = "生产日期")
-    private String manufactureDate;
+    private Date manufactureDate;
 
     @Excel(name = "含税价")
     private String priceIncludeTax;

+ 3 - 1
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/excel/detail/PurchaseReceiptDetailsExcel.java

@@ -5,6 +5,8 @@ import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 采购收货单明细
  */
@@ -22,7 +24,7 @@ public class PurchaseReceiptDetailsExcel extends BionutritionDocDetailsBaseExcel
     private String measureUnit;
 
     @Excel(name = "生产日期")
-    private String manufactureDate;
+    private Date manufactureDate;
 
     @Excel(name = "含税价")
     private String priceIncludeTax;

+ 6 - 6
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/BionutritionDocDetailsService.java

@@ -23,18 +23,18 @@ public interface BionutritionDocDetailsService extends CrudService<BionutritionD
     List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(List<String> docHeaderIdList);
 
     /**
-     * 根据单头id查询当前最大的明细行号
-     * @param docHeaderId
+     * 插入单据明细
+     * @param docDetailsDTO
      * @return
      */
-    String selectLineNo(String docHeaderId);
+    int insertDocDetails(BionutritionDocDetailsDTO docDetailsDTO);
 
     /**
-     * 插入单据明细
-     * @param docDetailsDTO
+     * 查询当前最大行号
+     * @param docHeaderId
      * @return
      */
-    int insertDocDetails(BionutritionDocDetailsDTO docDetailsDTO);
+    String selectLineNo(String docHeaderId);
 
     /**
      * 修改单据明细

+ 10 - 3
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/BionutritionDocHeaderService.java

@@ -5,8 +5,10 @@ import com.ruoyi.ams.bionutrition.doc.domain.BionutritionDocHeader;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocBaseDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocDetailsDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocHeaderDTO;
+import com.ruoyi.ams.bionutrition.doc.dto.DocExcelQueryDTO;
 import com.ruoyi.framework.service.CrudService;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -36,7 +38,7 @@ public interface BionutritionDocHeaderService extends CrudService<BionutritionDo
      * @param docHeaderDTO
      * @return
      */
-    int insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO);
+    String insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO);
 
     /**
      * 修改单据头
@@ -54,10 +56,10 @@ public interface BionutritionDocHeaderService extends CrudService<BionutritionDo
 
     /**
      * 根据查询条件获取导出单据数据
-     * @param docHeaderDTO
+     * @param docExcelQueryDTO
      * @return
      */
-    List<BionutritionDocBaseDTO> getDocList(BionutritionDocHeaderDTO docHeaderDTO);
+    List<BionutritionDocBaseDTO> getDocList(DocExcelQueryDTO docExcelQueryDTO);
 
     /**
      * 根据单头id获取单据集合
@@ -65,4 +67,9 @@ public interface BionutritionDocHeaderService extends CrudService<BionutritionDo
      * @return
      */
     List<BionutritionDocBaseDTO> getDicListByIds(String[] ids);
+
+    /**
+     * 导出单据excel方法
+     */
+    void exportExcel(HttpServletResponse response, DocExcelQueryDTO docExcelQueryDTO);
 }

+ 26 - 31
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/impl/BionutritionDocDetailsServiceImpl.java

@@ -33,26 +33,27 @@ import java.util.Map;
 public class BionutritionDocDetailsServiceImpl extends CrudServiceImpl<BionutritionDocDetailsMapper, BionutritionDocDetails, BionutritionDocDetailsDTO> implements BionutritionDocDetailsService {
 
 
-
     @Override
-    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(String docHeaderId){
+    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(String docHeaderId) {
         return getBionutritionDocDetailsDTOList(Lists.newArrayList(docHeaderId), Lists.newArrayList());
     }
 
     @Override
-    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(List<String> docHeaderIdList){
+    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(List<String> docHeaderIdList) {
         return getBionutritionDocDetailsDTOList(docHeaderIdList, Lists.newArrayList());
     }
 
     /**
      * 查找同单头的明细中最大的行号
+     *
      * @param docHeaderId
      * @return
      */
     @Override
     public String selectLineNo(String docHeaderId) {
-        BionutritionDocDetails bionutritionDocDetails = baseDao.selectOne(Wrappers.<BionutritionDocDetails>lambdaQuery()
-                .eq(StrUtil.isNotBlank(docHeaderId), BionutritionDocDetails::getDocHeaderId, docHeaderId)
+        Assert.isTrue(StrUtil.isNotBlank(docHeaderId),"单头id不能为空");
+                BionutritionDocDetails bionutritionDocDetails = baseDao.selectOne(Wrappers.<BionutritionDocDetails>lambdaQuery()
+                .eq(BionutritionDocDetails::getDocHeaderId, docHeaderId)
                 .orderByDesc(BionutritionDocDetails::getDocLineNo)
                 .last("limit 1"));
         return ObjectUtil.isNotNull(bionutritionDocDetails) ? bionutritionDocDetails.getDocLineNo() : Constant.ZERO;
@@ -60,80 +61,74 @@ public class BionutritionDocDetailsServiceImpl extends CrudServiceImpl<Bionutrit
 
     /**
      * 添加明细
+     *
      * @param docDetailsDTO
      * @return
      */
     @Override
     public int insertDocDetails(BionutritionDocDetailsDTO docDetailsDTO) {
         String lingNo = this.selectLineNo(docDetailsDTO.getDocHeaderId());
-        docDetailsDTO.setDocLineNo(String.valueOf(Long.valueOf(lingNo)+1));
-        return baseDao.insert(ConvertUtils.sourceToTarget(docDetailsDTO,BionutritionDocDetails.class));
+        docDetailsDTO.setDocLineNo(String.valueOf(Long.valueOf(lingNo) + 1));
+        return baseDao.insert(ConvertUtils.sourceToTarget(docDetailsDTO, BionutritionDocDetails.class));
     }
 
     /**
      * 根据单头id和明细行号修改明细
+     *
      * @param docDetailsDTO
      * @return
      */
     @Override
     public int updateDocDetails(BionutritionDocDetailsDTO docDetailsDTO) {
         UpdateWrapper<BionutritionDocDetails> updateWrapper = new UpdateWrapper<>();
-        // id不为空直接根据id修改
-        if (StringUtils.isNotBlank(docDetailsDTO.getId())){
-            BionutritionDocDetailsDTO bionutritionDocDetailsDTO = selectDocDetailsById(docDetailsDTO.getId());
-            Assert.notNull(bionutritionDocDetailsDTO,"该id对应明细不存在");
-            updateWrapper.lambda().eq(BionutritionDocDetails::getId, docDetailsDTO.getId());
-        }else { // 否则根据单头id和行号修改
-            Assert.isTrue(StringUtils.isNotBlank(docDetailsDTO.getDocHeaderId()),"单头id为空");
-            Assert.isTrue(StringUtils.isNotBlank(docDetailsDTO.getDocLineNo()),"单明细行号为空");
-            BionutritionDocDetailsDTO bionutritionDocDetailsDTO = selectDocDetailsByLineNo(docDetailsDTO.getDocHeaderId(), docDetailsDTO.getDocLineNo());
-            Assert.notNull(bionutritionDocDetailsDTO,"所属单头该行号明细不存在");
-            updateWrapper.lambda().eq(BionutritionDocDetails::getDocHeaderId, docDetailsDTO.getDocHeaderId())
-                    .eq(BionutritionDocDetails::getDocLineNo, docDetailsDTO.getDocLineNo());
-        }
+        BionutritionDocDetailsDTO bionutritionDocDetailsDTO = selectDocDetailsById(docDetailsDTO.getId());
+        Assert.notNull(bionutritionDocDetailsDTO, "该id对应明细不存在");
+        updateWrapper.lambda().eq(BionutritionDocDetails::getId, docDetailsDTO.getId());
         return baseDao.update(ConvertUtils.sourceToTarget(docDetailsDTO, BionutritionDocDetails.class), updateWrapper);
     }
 
     /**
      * 根据id查询明细
+     *
      * @param id
      * @return
      */
-    public BionutritionDocDetailsDTO selectDocDetailsById(String id){
+    public BionutritionDocDetailsDTO selectDocDetailsById(String id) {
         BionutritionDocDetails bionutritionDocDetails = baseDao.selectOne(Wrappers.<BionutritionDocDetails>lambdaQuery()
                 .eq(StrUtil.isNotBlank(id), BionutritionDocDetails::getId, id));
-        return ConvertUtils.sourceToTarget(bionutritionDocDetails,BionutritionDocDetailsDTO.class);
+        return ConvertUtils.sourceToTarget(bionutritionDocDetails, BionutritionDocDetailsDTO.class);
     }
 
     /**
      * 根据单头id和行号查询单个明细
+     *
      * @param docHeaderId
      * @param docLineNo
      * @return
      */
     @Override
     public BionutritionDocDetailsDTO selectDocDetailsByLineNo(String docHeaderId, String docLineNo) {
-        Assert.isTrue(StringUtils.isNotBlank(docHeaderId),"单头id为空");
-        Assert.isTrue(StringUtils.isNotBlank(docLineNo),"单明细行号为空");
+        Assert.isTrue(StringUtils.isNotBlank(docHeaderId), "单头id为空");
+        Assert.isTrue(StringUtils.isNotBlank(docLineNo), "单明细行号为空");
         BionutritionDocDetails bionutritionDocDetails = baseDao.selectOne(Wrappers.<BionutritionDocDetails>lambdaQuery()
-                .eq(StrUtil.isNotBlank(docHeaderId), BionutritionDocDetails::getDocHeaderId, docHeaderId)
-                .eq(StrUtil.isNotBlank(docLineNo), BionutritionDocDetails::getDocLineNo, docLineNo));
-        return ConvertUtils.sourceToTarget(bionutritionDocDetails,BionutritionDocDetailsDTO.class);
+                .eq(BionutritionDocDetails::getDocHeaderId, docHeaderId)
+                .eq(BionutritionDocDetails::getDocLineNo, docLineNo));
+        return ConvertUtils.sourceToTarget(bionutritionDocDetails, BionutritionDocDetailsDTO.class);
     }
 
-    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(List<String> docHeaderIdList, String skuCode){
+    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(List<String> docHeaderIdList, String skuCode) {
         return getBionutritionDocDetailsDTOList(docHeaderIdList, Lists.newArrayList(skuCode));
     }
 
-    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(String docHeaderId, String skuCode){
+    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(String docHeaderId, String skuCode) {
         return getBionutritionDocDetailsDTOList(Lists.newArrayList(docHeaderId), Lists.newArrayList(skuCode));
     }
 
-    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(String docHeaderId, List<String> skuCodeList){
+    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(String docHeaderId, List<String> skuCodeList) {
         return getBionutritionDocDetailsDTOList(Lists.newArrayList(docHeaderId), skuCodeList);
     }
 
-    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(List<String> docHeaderIdList, List<String> skuCodeList){
+    public List<BionutritionDocDetailsDTO> getBionutritionDocDetailsDTOList(List<String> docHeaderIdList, List<String> skuCodeList) {
         List<BionutritionDocDetails> bionutritionDocDetailsList = baseDao.selectList(Wrappers.<BionutritionDocDetails>lambdaQuery()
                 .in(CollectionUtil.isNotEmpty(docHeaderIdList), BionutritionDocDetails::getDocHeaderId, docHeaderIdList)
                 .in(CollectionUtil.isNotEmpty(skuCodeList), BionutritionDocDetails::getSkuCode, skuCodeList));

+ 107 - 8
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/service/impl/BionutritionDocHeaderServiceImpl.java

@@ -15,8 +15,12 @@ import com.ruoyi.ams.bionutrition.doc.domain.BionutritionDocHeader;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocBaseDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocDetailsDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocHeaderDTO;
+import com.ruoyi.ams.bionutrition.doc.dto.DocExcelQueryDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.detail.BionutritionDocDetailsBaseDTO;
 import com.ruoyi.ams.bionutrition.doc.dto.header.BionutritionDocHeaderBaseDTO;
+import com.ruoyi.ams.bionutrition.doc.excel.BionutritionDocBaseExcel;
+import com.ruoyi.ams.bionutrition.doc.excel.detail.BionutritionDocDetailsBaseExcel;
+import com.ruoyi.ams.bionutrition.doc.excel.header.BionutritionDocHeaderBaseExcel;
 import com.ruoyi.ams.bionutrition.doc.mapper.BionutritionDocHeaderMapper;
 import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocDetailsService;
 import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocHeaderService;
@@ -25,9 +29,19 @@ import com.ruoyi.common.utils.ConvertUtils;
 import com.ruoyi.common.utils.PageUtil;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.service.impl.CrudServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.streaming.SXSSFCell;
+import org.apache.poi.xssf.streaming.SXSSFRow;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -36,6 +50,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
+@Slf4j
 public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<BionutritionDocHeaderMapper, BionutritionDocHeader, BionutritionDocHeaderDTO> implements BionutritionDocHeaderService {
 
     @Autowired
@@ -68,9 +83,11 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
      * @return
      */
     @Override
-    public int insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO) {
+    public String insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO) {
         Assert.notNull(docHeaderDTO, "不允许插入空数据");
-        return baseDao.insert(ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class));
+        BionutritionDocHeader docHeader = ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class);
+        int result = baseDao.insert(docHeader);
+        return result > 0 ? docHeader.getId() : String.valueOf(result);
     }
 
     /**
@@ -81,8 +98,8 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
     @Override
     public int updateDoc(BionutritionDocHeaderDTO docHeaderDTO) {
         UpdateWrapper<BionutritionDocHeader> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().eq(StringUtils.isNotBlank(docHeaderDTO.getId()),BionutritionDocHeader::getId, docHeaderDTO.getId())
-                .eq(StringUtils.isNotBlank(docHeaderDTO.getDocNo()), BionutritionDocHeader::getDocNo, docHeaderDTO.getDocNo());
+        updateWrapper.lambda().eq(StringUtils.isNotBlank(docHeaderDTO.getId()),BionutritionDocHeader::getId, docHeaderDTO.getId());
+//                .eq(StringUtils.isNotBlank(docHeaderDTO.getDocNo()), BionutritionDocHeader::getDocNo, docHeaderDTO.getDocNo());
         return baseDao.update(ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class), updateWrapper);
     }
 
@@ -98,8 +115,8 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
     }
 
     @Override
-    public List<BionutritionDocBaseDTO> getDocList(BionutritionDocHeaderDTO docHeaderDTO) {
-        List<BionutritionDocHeaderDTO> docHeaderDTOList = getBionutritionDocHeaderDTOList(docHeaderDTO.getDocType());
+    public List<BionutritionDocBaseDTO> getDocList(DocExcelQueryDTO docExcelQueryDTO) {
+        List<BionutritionDocHeaderDTO> docHeaderDTOList = getBionutritionDocHeaderDTOList(docExcelQueryDTO.getDocType());
         return buildBionutritionDocSameTypeList(docHeaderDTOList);
 //        return buildBionutritionDocDifferentTypeList(docHeaderDTOList);
     }
@@ -117,6 +134,88 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
         return buildBionutritionDocDifferentTypeList(docHeaderDTOList);
     }
 
+    /**
+     * 导出单据excel
+     * @param response
+     * @param docExcelQueryDTO
+     */
+    @Override
+    public void exportExcel(HttpServletResponse response, DocExcelQueryDTO docExcelQueryDTO) {
+        List<BionutritionDocBaseDTO> list = StringUtils.isNotBlank(docExcelQueryDTO.getDocType()) ?
+                getDocList(docExcelQueryDTO) : getDicListByIds(docExcelQueryDTO.getIds());
+        List<BionutritionDocBaseExcel> docBaseExcels = list.stream()
+                .map(item -> BionutritionDocUtil.buildBionutritionDocBaseExcel(item.getBionutritionDocHeaderBaseDTO().getDocType(), item))
+                .collect(Collectors.toList());
+
+        // 创建工作簿对象
+        SXSSFWorkbook workbook = new SXSSFWorkbook();
+        SXSSFSheet sheet = workbook.createSheet();
+        Integer startRow = 0;
+        // 总列数
+        Integer collLength = 0;
+        //是同一类型的单据
+        if (StringUtils.isNotBlank(docExcelQueryDTO.getDocType())){
+
+            BionutritionDocBaseExcel bionutritionDocBaseExcel = docBaseExcels.get(0);
+            Class<? extends BionutritionDocHeaderBaseExcel> aClass = bionutritionDocBaseExcel.getBionutritionDocHeaderBaseExcelDTO().getClass();
+            Field[] headerSonFields = aClass.getDeclaredFields();
+            Field[] headerFatherFields = aClass.getSuperclass().getDeclaredFields();
+            //1.设置列数,长度为单头和明细的字段数和
+            // 单头字段数
+            collLength = headerSonFields.length + headerFatherFields.length;
+            log.info("=====单头字段长度:{}",collLength);
+
+            List<BionutritionDocDetailsBaseExcel> detailsBaseExcelList = bionutritionDocBaseExcel.getBionutritionDocDetailsBaseExcelList();
+            Class<? extends BionutritionDocDetailsBaseExcel> bClass = detailsBaseExcelList.get(0).getClass();
+            Field[] detailSonField = bClass.getDeclaredFields();
+            Field[] detailFatherFields = bClass.getSuperclass().getDeclaredFields();
+            // 加上明细字段数
+            collLength = collLength + detailSonField.length +detailFatherFields.length;
+
+            // 获取所有字段
+            Field[] totalFields = new Field[collLength];
+            System.arraycopy(headerSonFields,0,totalFields,0,headerSonFields.length);
+            System.arraycopy(headerFatherFields,0,totalFields,headerSonFields.length,headerFatherFields.length);
+            System.arraycopy(detailSonField,0,totalFields,headerSonFields.length + headerFatherFields.length,detailSonField.length);
+            System.arraycopy(detailFatherFields,0,totalFields,headerSonFields.length + headerFatherFields.length + detailSonField.length,detailFatherFields.length);
+            log.info("==所有字段:{}",totalFields);
+
+            //2.创建第一行标题
+            SXSSFRow row0 = sheet.createRow(0);
+            SXSSFCell cell1 = row0.createCell(0);
+            cell1.setCellValue("单头");
+            SXSSFCell cell2 = row0.createCell(headerSonFields.length + headerFatherFields.length+1);
+            cell2.setCellValue("明细");
+            // ‘单头’标题所占的列合并
+            sheet.addMergedRegion(new CellRangeAddress(0,0,0,headerSonFields.length + headerFatherFields.length));
+            // ‘明细’标题所占的列合并
+            sheet.addMergedRegion(new CellRangeAddress(0,0,headerSonFields.length + headerFatherFields.length+1,collLength));
+
+            //3.创建第二行标题
+            SXSSFRow row1 = sheet.createRow(1);
+            for (int i = 0; i < collLength; i++) {
+                SXSSFCell cell = row1.createCell(i);
+                cell.setCellValue(totalFields[i].getName());
+            }
+
+            // 4.设置数据
+
+            // 5.响应到客户端
+            OutputStream out = null;
+            try {
+                out = response.getOutputStream();
+                response.setContentType("application/x-msdownload");
+                response.setHeader("Content-Disposition","attachment;filename=test1");
+                workbook.write(out);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+
+
+    }
+
     /**
      * 构建类型单据内容(单个)
      * @param docNo
@@ -186,7 +285,7 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
     private List<BionutritionDocBaseDTO> buildBionutritionDocSameTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList){
         List<BionutritionDocHeaderBaseDTO> bionutritionDocHeaderBaseDTOList = BionutritionDocUtil.buildBionutritionDocHeaderDTOList(bionutritionDocHeaderDTOList);
         List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(
-                bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getDocNo).distinct().collect(Collectors.toList()));
+                bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getId).distinct().collect(Collectors.toList()));
         List<BionutritionDocDetailsBaseDTO> bionutritionDocDetailsBaseDTOList = BionutritionDocUtil.buildBionutritionDocDetailsDTOList(
                 bionutritionDocHeaderDTOList.stream().findFirst().get().getDocType(), bionutritionDocDetailsDTOList);
         return getBionutritionDocBaseDTOList(bionutritionDocDetailsBaseDTOList, bionutritionDocHeaderBaseDTOList);
@@ -200,7 +299,7 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
     private List<BionutritionDocBaseDTO> buildBionutritionDocDifferentTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList){
         Map<String, List<BionutritionDocHeaderBaseDTO>> bionutritionDocHeaderMap = BionutritionDocUtil.buildBionutritionDocHeaderDTOByDocTypeMap(bionutritionDocHeaderDTOList);
         List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(
-                bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getDocNo).distinct().collect(Collectors.toList()));
+                bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getId).distinct().collect(Collectors.toList()));
         Map<String, List<BionutritionDocDetailsDTO>> bionutritionDocDetailsMap = bionutritionDocHeaderMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey,
                 item -> bionutritionDocDetailsDTOList.stream().filter(detail -> item.getValue().stream().anyMatch(header ->
                         StringUtils.equals(header.getId(), detail.getDocHeaderId()))).collect(Collectors.toList())));

+ 11 - 2
warewms-ams/src/main/java/com/ruoyi/ams/bionutrition/doc/util/BionutritionDocUtil.java

@@ -72,10 +72,19 @@ public class BionutritionDocUtil {
      */
     @SneakyThrows
     public static <E extends BionutritionDocDetailsBaseDTO> List<E> buildBionutritionDocDetailsDTOList(String docType, List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList) {
-        Assert.isTrue(StringUtils.isNotBlank(docType), "docType is null");
+        /*Assert.isTrue(StringUtils.isNotBlank(docType), "docType is null");
         return CollectionUtil.isNotEmpty(bionutritionDocDetailsDTOList) ?
                 bionutritionDocDetailsDTOList.stream().map(item -> (E) buildBionutritionDocDetailsDTO(docType, item)).collect(Collectors.toList()) :
-                buildBionutritionDocDetailsDTO(docType, new BionutritionDocDetailsDTO());
+                buildBionutritionDocDetailsDTO(docType, new BionutritionDocDetailsDTO());*/
+        if (CollectionUtil.isNotEmpty(bionutritionDocDetailsDTOList)){
+            Assert.isTrue(StringUtils.isNotBlank(docType), "docType is null");
+            return bionutritionDocDetailsDTOList.stream().map(item -> (E) buildBionutritionDocDetailsDTO(docType, item)).collect(Collectors.toList());
+        } else {
+            List<E> docDetailsDTOList = new ArrayList<>();
+            E docDetailsBaseDTO = buildBionutritionDocDetailsDTO(docType, new BionutritionDocDetailsDTO());
+            docDetailsDTOList.add(docDetailsBaseDTO);
+            return docDetailsDTOList;
+        }
     }
 
     /**

+ 1 - 0
warewms-ams/src/main/resources/mapper/doc/BionutritionDocHeaderMapper.xml

@@ -67,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectDocHeaderResultVo"/>
         <where>
             <if test="docType != null and docType != ''"> and doc_type = #{docType}</if>
+            <if test="docNo != null and docNo != ''"> and doc_no = #{docNo}</if>
             <if test="businessType != null and businessType != ''"> and business_type = #{businessType} </if>
         </where>
         order by create_date desc