guoyujia 1 жил өмнө
parent
commit
8487fb10dc

+ 7 - 0
pom.xml

@@ -37,6 +37,7 @@
         <oshi.version>6.4.0</oshi.version>
         <velocity.version>2.3</velocity.version>
         <mybatis-plus.spring.boot.starter.version>3.5.0</mybatis-plus.spring.boot.starter.version>
+        <easyexcel.version>3.3.2</easyexcel.version>
         <commons.fileupload.version>1.4</commons.fileupload.version>
         <hutool.version>5.8.11</hutool.version>
         <spring-cloud-nacos.version>2021.0.1.0</spring-cloud-nacos.version>
@@ -62,6 +63,12 @@
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
             <version>${spring-cloud-nacos.version}</version>
         </dependency>
+        <!--easyExcel-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>${easyexcel.version}</version>
+        </dependency>
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

+ 46 - 0
src/main/java/cn/ezhizao/common/utils/MyHandler.java

@@ -0,0 +1,46 @@
+package cn.ezhizao.common.utils;
+
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.write.merge.AbstractMergeStrategy;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.RegionUtil;
+
+import java.util.List;
+
+public class MyHandler extends AbstractMergeStrategy {
+    @Override
+    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
+        if(relativeRowIndex==null ||relativeRowIndex==0){
+            return;
+        }
+
+        int rowIndex = cell.getRowIndex();
+        int colIndex = cell.getColumnIndex();
+        sheet=cell.getSheet();
+        Row preRow = sheet.getRow(rowIndex - 1);
+        Cell preCell = preRow.getCell(colIndex);//获取上一行的该格
+        List<CellRangeAddress> list = sheet.getMergedRegions();
+        for (int i = 0; i < list.size(); i++) {
+            CellRangeAddress cellRangeAddress = list.get(i);
+            if (cellRangeAddress.containsRow(preCell.getRowIndex()) && cellRangeAddress.containsColumn(preCell.getColumnIndex())) {
+                int lastColIndex = cellRangeAddress.getLastColumn();
+                int firstColIndex = cellRangeAddress.getFirstColumn();
+                int firstRowIndex = cellRangeAddress.getFirstRow();
+                CellRangeAddress cra = new CellRangeAddress(rowIndex, rowIndex, firstColIndex, lastColIndex);
+                sheet.addMergedRegion(cra);
+
+                //设置合并区域cra的边框
+                RegionUtil.setBorderBottom(BorderStyle.THIN, cra, sheet);
+                RegionUtil.setBorderLeft(BorderStyle.THIN, cra, sheet);
+                RegionUtil.setBorderRight(BorderStyle.THIN, cra, sheet);
+                RegionUtil.setBorderTop(BorderStyle.THIN, cra, sheet);
+
+                return;
+            }
+        }
+    }
+}

+ 3 - 3
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderDetailController.java

@@ -150,7 +150,6 @@ public class BizOutsourcedOrderDetailController extends BaseController
 //        setTenantId(bizOutsourcedOrderDetail);
         String tenantId = request.getHeader("tenantId");
         bizOutsourcedOrderDetail.setSupplierId(Long.valueOf(tenantId));
-        startPage();
         // 获取所有该外协商未完成的 外协明细对应的工序明细
         List<BizOutsourcedOrderDetailProcess> notFinishedDetail = bizOutsourcedOrderDetailProcessService.query()
                 // 这里的tenantId,存储的是supplier_id
@@ -159,19 +158,20 @@ public class BizOutsourcedOrderDetailController extends BaseController
                 .eq("qualified_num", 0)
                 .list();
         // 将所有未完成的外协明细的id,存在一个集合中
-        List<Long> outsourcedOrderDetailIds = notFinishedDetail.stream().map(BizOutsourcedOrderDetailProcess::getDetailId).collect(Collectors.toList());
+        List<Long> outsourcedOrderDetailIds = notFinishedDetail.stream().map(BizOutsourcedOrderDetailProcess::getDetailId).distinct().collect(Collectors.toList());
         bizOutsourcedOrderDetail.setNotFinishedDetailIds(outsourcedOrderDetailIds);
         //将已添加的外协明细的id,存在一个集合中
         List<BizReturnReceiptDetail> alreadyAddedDetailList = bizReturnReceiptDetailService.query()
                 .eq("supplier_id", bizOutsourcedOrderDetail.getSupplierId())
                 .list();
-        List<Long> alreadyAddedDetailIds = alreadyAddedDetailList.stream().map(BizReturnReceiptDetail::getOutsourceDetailId).collect(Collectors.toList());
+        List<Long> alreadyAddedDetailIds = alreadyAddedDetailList.stream().map(BizReturnReceiptDetail::getOutsourceDetailId).distinct().collect(Collectors.toList());
         bizOutsourcedOrderDetail.setAlreadyAddedDetailIds(alreadyAddedDetailIds);
         /*
          1、把未做收回的外协明细列出
          2、把已经报工完成的外协明细列出来
          */
         bizOutsourcedOrderDetail.setSupplierId(Long.valueOf(tenantId));
+        startPage();
         List<BizOutsourcedOrderDetail> list = bizOutsourcedOrderDetailService.getListForReceipt(bizOutsourcedOrderDetail);
         //因为新箱子保存的时候,是用“id|code,id|code”的字符串形式存储的所以查询的时候需要进行拆分
         //如果保存的时候没有选择新箱子则会把旧箱号复制到新箱号中,所有不会有“|”所以下方需要进行判断

+ 37 - 0
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderDetailProcessController.java

@@ -3,11 +3,14 @@ package cn.ezhizao.project.business.controller;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.ezhizao.project.business.domain.BizCarrier;
+import cn.ezhizao.project.business.domain.BizReturnReceiptDetail;
+import cn.ezhizao.project.business.service.IBizReturnReceiptDetailService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import cn.ezhizao.framework.aspectj.lang.annotation.Log;
@@ -32,6 +35,8 @@ public class BizOutsourcedOrderDetailProcessController extends BaseController
     @Resource
     private IBizOutsourcedOrderDetailProcessService bizOutsourcedOrderDetailProcessService;
     @Resource
+    private IBizReturnReceiptDetailService returnReceiptDetailService;
+    @Resource
     private HttpServletRequest request;
 
     /**
@@ -47,11 +52,43 @@ public class BizOutsourcedOrderDetailProcessController extends BaseController
         if(bizOutsourcedOrderDetailProcess.getEndTime()!=null) {
             bizOutsourcedOrderDetailProcess.setEndTime(bizOutsourcedOrderDetailProcess.getEndTime()+ " 23:59:59");
         }
+        //已经确认的外协单
+        List<Long> hasReturnDetailId = returnReceiptDetailService.query().eq("is_audit", 1).list().stream().map(BizReturnReceiptDetail::getOutsourceDetailId).distinct().collect(Collectors.toList());
+        bizOutsourcedOrderDetailProcess.setHasReturnDetailId(hasReturnDetailId);
         startPage();
         bizOutsourcedOrderDetailProcess.setSupplierId(Long.valueOf(request.getHeader("tenantId")));
         List<BizOutsourcedOrderDetailProcess> list = bizOutsourcedOrderDetailProcessService.getList(bizOutsourcedOrderDetailProcess);
+        //收回状态
+        list.forEach(item ->{
+            item.setReturnStatus(0);
+            if(item.getReturnReceiptDetails()!=null &&item.getReturnReceiptDetails().size()>0&&item.getReturnReceiptDetails().get(0).getIsAudit() == 1 ) {
+                item.setReturnStatus(1);
+            }
+        });
         return getDataTable(list);
     }
+    @PostMapping("/getLastProcessQualifitedNum")
+    public AjaxResult getLastProcessQualifitedNum(@RequestBody BizOutsourcedOrderDetailProcess bizOutsourcedOrderDetailProcess) throws NoSuchFieldException, IllegalAccessException
+    {
+        //拿到该外协单的工序
+        List<BizOutsourcedOrderDetailProcess> detailList = bizOutsourcedOrderDetailProcessService.query().eq("detail_id",bizOutsourcedOrderDetailProcess.getDetailId()).orderByAsc("process_step_number").list();
+        int index =-1;
+        for(int i = 0;i<detailList.size();i++) {
+            if(detailList.get(i).getProcessStepNumber().equals(bizOutsourcedOrderDetailProcess.getProcessStepNumber())) {
+                index = i;
+            }
+        }
+        if(index>0) {
+            if(detailList.get(index-1).getProductionNum() == 0) {
+                return error("上一道序未报工,不允许报此道序");
+            }
+            else{
+                return success(detailList.get(index-1).getQualifiedNum());
+            }
+        }else{
+            return success(bizOutsourcedOrderDetailProcess.getProductNum());
+        }
+    }
 
     /**
      * 导出外协单从对应的外协工序的从列表

+ 98 - 21
src/main/java/cn/ezhizao/project/business/controller/BizReturnReceiptController.java

@@ -84,12 +84,39 @@ public class BizReturnReceiptController extends BaseController
     @PreAuthorize("@ss.hasPermi('business:returnReceipt:export')")
     @Log(title = "收回单主带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, BizReturnReceipt bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException
-    {
-        setTenantId(bizOutsourcedOrder);
-        List<BizReturnReceipt> list = bizReturnReceiptService.getList(bizOutsourcedOrder);
-        ExcelUtil<BizReturnReceipt> util = new ExcelUtil<>(BizReturnReceipt.class);
-        util.exportExcel(response, list, "收回单主带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子数据");
+    public void export(HttpServletResponse response, BizReturnReceipt bizReturnReceipt) throws NoSuchFieldException, IllegalAccessException, IOException {
+        bizReturnReceipt = bizReturnReceiptService.getById(bizReturnReceipt);
+        BizSupplier supplier = bizSupplierService.query().eq("id", bizReturnReceipt.getSupplierId()).list().get(0);
+        bizReturnReceipt.setSupplierCode(supplier.getCode());
+        List<BizReturnReceiptDetail> returnReceiptDetailList = bizReturnReceiptDetailService.query().eq("master_id",bizReturnReceipt.getId()).orderByAsc("process_step_number").list();
+        //按照批次分组,一个批次合并成一条
+        List<String> lotCodeList = returnReceiptDetailList.stream()
+                .map(BizReturnReceiptDetail::getLotCode)
+                .distinct()
+                .collect(Collectors.toList());
+        Map<String, List<BizReturnReceiptDetail>> groupedByLotCode = new LinkedHashMap<>();
+        for (String lotCode : lotCodeList) {
+            groupedByLotCode.put(lotCode, returnReceiptDetailList.stream()
+                    .filter(record -> record.getLotCode().equals(lotCode))
+                    .sorted(Comparator.comparing(BizReturnReceiptDetail::getProcessStepNumber))
+                    .collect(Collectors.toList()));
+        }
+        List<BizReturnReceiptDetail> details = new ArrayList<>();
+        for (Map.Entry<String, List<BizReturnReceiptDetail>> entry : groupedByLotCode.entrySet()) {
+            BizReturnReceiptDetail info = new BizReturnReceiptDetail();
+            String lotCode = entry.getKey();
+            List<BizReturnReceiptDetail> detailList = entry.getValue();
+            info.setProductDescription(detailList.get(0).getProductDescription());
+            info.setOutsourceDetailId(detailList.get(0).getOutsourceDetailId());
+            info.setLotCode(lotCode);
+            info.setReceiptNum(detailList.get(detailList.size() -1).getReceiptNum());
+            info.setNewCarrier(detailList.get(0).getNewCarrier());
+            info.setNewCarrierCount(detailList.get(0).getNewCarrierCount());
+            info.setRemark(detailList.get(0).getRemark());
+            details.add(info);
+        }
+        bizReturnReceipt.setDetails(details);
+        bizReturnReceiptService.exportTemplateProvinceAreaData(response, bizReturnReceipt);
     }
     /**
      * 新增外协单主
@@ -130,7 +157,15 @@ public class BizReturnReceiptController extends BaseController
         //向收回单主表存
         bizReturnReceiptService.save(bizReturnReceipt);
         //向收回单明细表存
-        bizReturnReceipt.getDetails().stream()
+//        bizReturnReceipt.getDetails().stream()
+//                .forEach(bizReturnReceiptDetail -> {
+//                    bizReturnReceiptDetail.setMasterId(bizReturnReceipt.getId());
+//                    bizReturnReceiptDetail.setFormCode(bizReturnReceipt.getFormCode());
+//                    bizReturnReceiptDetail.setSupplierId(bizReturnReceipt.getSupplierId());
+//                    bizReturnReceiptDetail.setSupplierName(bizReturnReceipt.getSupplierName());
+//                    bizReturnReceiptDetail.setFormDate(bizReturnReceipt.getFormDate());
+//                });
+        bizReturnReceipt.getDetailInfo().stream()
                 .forEach(bizReturnReceiptDetail -> {
                     bizReturnReceiptDetail.setMasterId(bizReturnReceipt.getId());
                     bizReturnReceiptDetail.setFormCode(bizReturnReceipt.getFormCode());
@@ -138,7 +173,8 @@ public class BizReturnReceiptController extends BaseController
                     bizReturnReceiptDetail.setSupplierName(bizReturnReceipt.getSupplierName());
                     bizReturnReceiptDetail.setFormDate(bizReturnReceipt.getFormDate());
                 });
-        return success(bizReturnReceiptDetailService.saveBatch(bizReturnReceipt.getDetails()));
+//        return success(bizReturnReceiptDetailService.saveBatch(bizReturnReceipt.getDetails()));
+        return success(bizReturnReceiptDetailService.saveBatch(bizReturnReceipt.getDetailInfo()));
     }
     /**
      * 修改外协单主
@@ -153,7 +189,7 @@ public class BizReturnReceiptController extends BaseController
         bizReturnReceiptService.updateById(bizReturnReceipt);
         //向收回单明细表存
         List<BizReturnReceiptDetail> oldList = bizReturnReceiptDetailService.query().eq("master_id",bizReturnReceipt.getId()).list();
-        bizReturnReceipt.getDetails().stream()
+        bizReturnReceipt.getDetailInfo().stream()
                 .forEach(bizReturnReceiptDetail -> {
                     bizReturnReceiptDetail.setMasterId(bizReturnReceipt.getId());
                     bizReturnReceiptDetail.setFormCode(bizReturnReceipt.getFormCode());
@@ -161,7 +197,16 @@ public class BizReturnReceiptController extends BaseController
                     bizReturnReceiptDetail.setSupplierName(bizReturnReceipt.getSupplierName());
                     bizReturnReceiptDetail.setFormDate(bizReturnReceipt.getFormDate());
                 });
-        saveOrUpdateBatch(bizReturnReceiptDetailService,bizReturnReceipt.getDetails(),oldList);
+        saveOrUpdateBatch(bizReturnReceiptDetailService,bizReturnReceipt.getDetailInfo(),oldList);
+//        bizReturnReceipt.getDetails().stream()
+//                .forEach(bizReturnReceiptDetail -> {
+//                    bizReturnReceiptDetail.setMasterId(bizReturnReceipt.getId());
+//                    bizReturnReceiptDetail.setFormCode(bizReturnReceipt.getFormCode());
+//                    bizReturnReceiptDetail.setSupplierId(bizReturnReceipt.getSupplierId());
+//                    bizReturnReceiptDetail.setSupplierName(bizReturnReceipt.getSupplierName());
+//                    bizReturnReceiptDetail.setFormDate(bizReturnReceipt.getFormDate());
+//                });
+//        saveOrUpdateBatch(bizReturnReceiptDetailService,bizReturnReceipt.getDetails(),oldList);
         return success();
     }
     /**
@@ -188,21 +233,53 @@ public class BizReturnReceiptController extends BaseController
                 .in("detail_id", detailIds)
                 .orderByAsc(Arrays.asList("detail_id", "process_step_number"))
                 .list();
-
-        // 遍历明细,将对应的工序,与订单明细进行匹配
-        returnReceiptDetails.forEach(item -> {
-            // 根据明细的id,获取到该明细对应的收回工序,并将得到的工序,组成中文逗号分割的字符串
-            String processNames = detailProcesses.stream()
-                    .filter(dp -> dp.getDetailId().equals(item.getOutsourceDetailId()))
+        //按照批次分组,一个批次合并成一条
+        List<String> lotCodeList = returnReceiptDetails.stream()
+                .map(BizReturnReceiptDetail::getLotCode)
+                .distinct()
+                .collect(Collectors.toList());
+        Map<String, List<BizReturnReceiptDetail>> groupedByLotCode = new LinkedHashMap<>();
+        for (String lotCode : lotCodeList) {
+            groupedByLotCode.put(lotCode, returnReceiptDetails.stream()
+                    .filter(record -> record.getLotCode().equals(lotCode))
+                            .sorted(Comparator.comparing(BizReturnReceiptDetail::getProcessStepNumber))
+                    .collect(Collectors.toList()));
+        }
+        List<BizReturnReceiptDetail> details = new ArrayList<>();
+        for (Map.Entry<String, List<BizReturnReceiptDetail>> entry : groupedByLotCode.entrySet()) {
+            BizReturnReceiptDetail info = new BizReturnReceiptDetail();
+            String lotCode = entry.getKey();
+            List<BizReturnReceiptDetail> detailList = entry.getValue();
+            info.setProductDescription(detailList.get(0).getProductDescription());
+            info.setOutsourceDetailId(detailList.get(0).getOutsourceDetailId());
+            info.setLotCode(lotCode);
+            info.setProductNum(detailList.get(0).getProductNum());
+            info.setReceiptNum(detailList.get(detailList.size() -1).getReceiptNum());
+            info.setNewCarrier(detailList.get(0).getNewCarrier());
+            info.setRemark(detailList.get(0).getRemark());
+            info.setProcessAlias(detailProcesses.stream()
+                    .filter(dp -> dp.getDetailId().equals(detailList.get(0).getOutsourceDetailId()))
                     .sorted(Comparator.comparing((BizOutsourcedOrderDetailProcess::getProcessStepNumber)))
                     .map(BizOutsourcedOrderDetailProcess::getProcessAlias)
-                    .collect(Collectors.joining(","));
-
-            item.setProcessNames(processNames);
-        });
+                    .collect(Collectors.joining(",")));
+            details.add(info);
+        }
+//        // 遍历明细,将对应的工序,与订单明细进行匹配
+//        returnReceiptDetails.forEach(item -> {
+//            // 根据明细的id,获取到该明细对应的收回工序,并将得到的工序,组成中文逗号分割的字符串
+//            String processNames = detailProcesses.stream()
+//                    .filter(dp -> dp.getDetailId().equals(item.getOutsourceDetailId()))
+//                    .sorted(Comparator.comparing((BizOutsourcedOrderDetailProcess::getProcessStepNumber)))
+//                    .map(BizOutsourcedOrderDetailProcess::getProcessAlias)
+//                    .collect(Collectors.joining(","));
+//
+//            item.setProcessNames(processNames);
+//        });
 
         // 将收回明细赋值给收回订单
-        returnReceipt.setDetails(returnReceiptDetails);
+        returnReceipt.setDetailInfo(returnReceiptDetails);
+        returnReceipt.setDetails(details);
+
 
         return success(returnReceipt);
     }

+ 7 - 0
src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrderDetailProcess.java

@@ -155,4 +155,11 @@ public class BizOutsourcedOrderDetailProcess extends BaseEntity
     private Integer receiptNum;
     @TableField(exist = false)
     private List<BizReturnReceiptDetail> returnReceiptDetails;
+    @TableField(exist = false)
+    private Integer returnStatus;
+    @TableField(exist = false)
+    private List<Long> hasReturnDetailId;
+    @TableField(exist = false)
+    private String newCarrierName;
+
 }

+ 5 - 2
src/main/java/cn/ezhizao/project/business/domain/BizReturnReceipt.java

@@ -54,6 +54,8 @@ public class BizReturnReceipt extends BaseEntity
     /** 对应的收回明细 **/
     @TableField(exist = false)
     private List<BizReturnReceiptDetail> details;
+    @TableField(exist = false)
+    private List<BizReturnReceiptDetail> detailInfo;
 
     /** 前端查询用 开始日期 **/
     @JsonFormat(pattern = "yyyy-MM-dd")
@@ -74,11 +76,12 @@ public class BizReturnReceipt extends BaseEntity
     /** 打印使用 */
     @TableField(exist = false)
     private String supplierCode;
+    private Integer isSubmit;
+    @TableField(exist = false)
+    private Integer isAudit;
 
     @TableField(exist = false)
     private List<List<BizReturnReceiptDetail>> detailLists;
-
-
     @TableField(exist = false)
     private String stringDate;
 

+ 6 - 0
src/main/java/cn/ezhizao/project/business/domain/BizReturnReceiptDetail.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -120,11 +121,16 @@ public class BizReturnReceiptDetail extends BaseEntity
     private Long technologicalProcessId;
     private String technologyVersion;
     private Long technologicalProcessDetailId;
+    @TableField(exist = false)
+    private Integer deliveryMethod;
+    @TableField(exist = false)
+    private Long packagingMethod;
     private Long processId;
     private String processAlias;
     private String processStepNumber;
     private String processCode;
     private Integer auditNum;
+    private Integer isAudit;
 
     /** 打印 */
     //发出总数量 只在打印时用到

+ 4 - 0
src/main/java/cn/ezhizao/project/business/service/IBizReturnReceiptService.java

@@ -1,8 +1,11 @@
 package cn.ezhizao.project.business.service;
 
+import cn.ezhizao.project.business.domain.BizOutsourcedOrder;
 import cn.ezhizao.project.business.domain.BizReturnReceipt;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -20,6 +23,7 @@ public interface IBizReturnReceiptService extends IService<BizReturnReceipt>
      * @return 收回单主表
      */
     List<BizReturnReceipt> getList(BizReturnReceipt bizReturnReceipt);
+    void exportTemplateProvinceAreaData(HttpServletResponse response, BizReturnReceipt bizReturnReceipt) throws IOException;
 
     /**
      * 物理删除

+ 55 - 1
src/main/java/cn/ezhizao/project/business/service/impl/BizReturnReceiptServiceImpl.java

@@ -1,16 +1,29 @@
 package cn.ezhizao.project.business.service.impl;
 
+import cn.ezhizao.common.utils.MyHandler;
 import cn.ezhizao.project.business.domain.BizOutsourcedOrder;
+import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail;
 import cn.ezhizao.project.business.domain.BizReturnReceipt;
+import cn.ezhizao.project.business.domain.BizReturnReceiptDetail;
 import cn.ezhizao.project.business.mapper.BizOutsourcedOrderMapper;
 import cn.ezhizao.project.business.mapper.BizReturnReceiptMapper;
 import cn.ezhizao.project.business.service.IBizOutsourcedOrderService;
 import cn.ezhizao.project.business.service.IBizReturnReceiptService;
+import cn.ezhizao.project.system.domain.SysUser;
+import cn.hutool.core.io.IoUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.List;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
 
 /**
  * 收回单主表
@@ -25,6 +38,8 @@ public class BizReturnReceiptServiceImpl extends ServiceImpl<BizReturnReceiptMap
     private BizReturnReceiptMapper bizReturnReceiptMapper;
     @Resource
     private BizOutsourcedOrderMapper bizOutsourcedOrderMapper;
+    @Value("${file.excelTemplate.url}")
+    private  String templatePath;
 
     /**
      * 查询外协单主表
@@ -45,4 +60,43 @@ public class BizReturnReceiptServiceImpl extends ServiceImpl<BizReturnReceiptMap
      */
     @Override
     public int physicalDelete(BizReturnReceipt bizReturnReceipt){ return bizReturnReceiptMapper.physicalDelete(bizReturnReceipt); };
+    @Override
+    public void exportTemplateProvinceAreaData(HttpServletResponse response, BizReturnReceipt bizReturnReceipt) throws IOException {
+        List<BizReturnReceiptDetail> result = bizReturnReceipt.getDetails();
+        String template = "outsourcedReturn";
+        String templateFilePath =  templatePath + template + ".xlsx";
+        //本地导出
+        //excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();
+        //流输出
+        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+                .withTemplate(templateFilePath)
+                .build();
+
+        WriteSheet writeSheet = EasyExcel.writerSheet().registerWriteHandler(new MyHandler()).build();
+
+        //配置多组数据填充完后,需要换行,防止覆盖模板中的单组数据模板
+        FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
+        // 直接写入list数据
+        excelWriter.fill(result, fillConfig, writeSheet);
+        // 写入自定义的表头
+        Map<String, Object> map = new HashMap<>();
+        map.put("formCode",bizReturnReceipt.getFormCode());
+        map.put("supplierName",bizReturnReceipt.getSupplierName());
+        map.put("supplierCode",bizReturnReceipt.getSupplierCode());
+        map.put("formDate",bizReturnReceipt.getFormDate());
+        excelWriter.fill(map, writeSheet);
+        excelWriter.finish();
+
+        response.setContentType("application/vnd.ms-excel;charset=utf-8");
+        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
+        response.setHeader("Content-Disposition", "attachment;filename=test.xlsx");
+        ServletOutputStream out = null;
+        try {
+            out = response.getOutputStream();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        //此处记得关闭输出Servlet流
+        IoUtil.close(out);
+    }
 }

+ 3 - 0
src/main/resources/application-dev.yml

@@ -82,3 +82,6 @@ spring:
 # 文件上传
 ruoyi:
     profile: D:/Ezhizao/identity/
+file:
+    excelTemplate:
+        url: D:/Ezhizao/dms/templates/

+ 3 - 0
src/main/resources/application-linux.yml

@@ -88,4 +88,7 @@ spring:
 # 文件上传
 ruoyi:
     profile: /home/files/dms/
+file:
+     excelTemplate:
+        url: /home/files/dms/templates/
 

+ 2 - 2
src/main/resources/mybatis/business/BizOutsourcedOrderDetailMapper.xml

@@ -90,9 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getProcessNames" resultType="String">
         SELECT
-            GROUP_CONCAT(t.process_alias)
+            GROUP_CONCAT(t.process_alias order by t.process_step_number)
         FROM biz_outsourced_order_detail_process t
-        WHERE t.detail_id = #{id}
+        WHERE t.detail_id = #{id} and deleted = 0
     </select>
     <select id="getReceiptNum" resultType="Integer">
         SELECT t1.qualified_num as receiptNum

+ 21 - 3
src/main/resources/mybatis/business/BizOutsourcedOrderDetailProcessMapper.xml

@@ -12,22 +12,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 
     <select id="getList" parameterType="BizOutsourcedOrderDetailProcess" resultMap="BizOutsourcedOrderDetailProcessResult">
-        SELECT t1.*,t2.loss_limit FROM biz_outsourced_order_detail_process t1 right join biz_outsourced_order t2 on t1.master_id = t2.id
+        SELECT t1.*,t2.loss_limit,(select new_carrier_name from biz_outsourced_order_detail where t1.detail_id =biz_outsourced_order_detail.id and biz_outsourced_order_detail.deleted = 0 ) as newCarrierName FROM biz_outsourced_order_detail_process t1 right join biz_outsourced_order t2 on t1.master_id = t2.id
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
-            t1.deleted = 0 and t2.is_submit = 1
+            t1.deleted = 0 and t2.is_submit = 1 and t2.deleted = 0
             <if test="formCode != null  and formCode != ''"> AND t1.form_code like concat('%', #{formCode}, '%')</if>
             <if test="lotCode != null  and lotCode != ''"> AND t1.lot_code like concat('%', #{lotCode}, '%')</if>
             <if test="startTime != null ">AND t1.form_date &gt;= #{startTime}</if>
             <if test="endTime != null ">AND t1.form_date &lt;= #{endTime}</if>
             <if test="supplierId != null "> AND t1.supplier_id = #{supplierId}</if>
+            <if test="masterId != null "> AND t1.master_id = #{masterId}</if>
             <if test="supplierName != null  and supplierName != ''"> AND t1.supplier_name like concat('%', #{supplierName}, '%')</if>
             <if test="deliveryMethod != null "> AND t1.delivery_method = #{deliveryMethod}</if>
             <if test="packagingMethod != null  and packagingMethod != ''"> AND t1.packaging_method = #{packagingMethod}</if>
             <if test="productDescription != null  and productDescription != ''"> AND t1.product_description like concat('%', #{productDescription}, '%')</if>
             <if test="technologyVersion != null  and technologyVersion != ''"> AND t1.technology_version = #{technologyVersion}</if>
             <if test="processAlias != null  and processAlias != ''"> AND t1.process_alias = #{processAlias}</if>
+            <if test="newCarrierName != null"> AND exists (select 1
+                FROM
+                biz_outsourced_order_detail where t1.detail_id =biz_outsourced_order_detail.id
+                and new_carrier_name like concat('%',#{newCarrierName},'%')
+                )</if>
+            <if test="status != null  "> AND t1.status = #{status}</if>
+            <if test="returnStatus ==0 "> AND t1.detail_id not in
+                <foreach collection="hasReturnDetailId" index="index" item="id" separator="," open="(" close=")">
+                    #{id,jdbcType=BIGINT}
+                </foreach>
+            </if>
+            <if test="returnStatus ==1 "> AND t1.detail_id  in
+                <foreach collection="hasReturnDetailId" index="index" item="id" separator="," open="(" close=")">
+                    #{id,jdbcType=BIGINT}
+                </foreach>
+            </if>
         </trim>
-        order by t1.form_code desc ,t1.process_step_number
+        order by t1.form_date ,t1.lot_code,t1.process_step_number
     </select>
     <select id="getDetailList" resultMap="BizOutsourcedOrderDetailProcessResult">
         select t1.*,t2.original_carrier,t2.new_carrier,t1.qualified_num as receipt_num,t2.original_carrier_count,t2.new_carrier_count  from biz_outsourced_order_detail_process t1
@@ -41,6 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getReturnReceiptDetailList" resultType="cn.ezhizao.project.business.domain.BizReturnReceiptDetail">
         select * from biz_return_receipt_detail where lot_id = #{lotId} and process_step_number = #{processStepNumber} and deleted = 0
     </select>
+
     <delete id="physicalDelete">
         DELETE FROM biz_outsourced_order_detail_process
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">

+ 2 - 1
src/main/resources/mybatis/business/BizReturnReceiptDetailMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.ezhizao.project.business.mapper.BizOutsourcedOrderDetailMapper">
+<mapper namespace="cn.ezhizao.project.business.mapper.BizReturnReceiptDetailMapper">
 
     <resultMap type="cn.ezhizao.project.business.domain.BizReturnReceiptDetail" id="BizReturnReceiptDetailResult">
         <id column="id" property="id"/>
@@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
             deleted = 0
             <if test="formCode != null  and formCode != ''"> AND form_code = #{formCode}</if>
+            <if test="masterId != null"> AND master_id = #{masterId}</if>
             <if test="formDate != null "> AND form_date = #{formDate}</if>
             <if test="supplierName != null  and supplierName != ''"> AND supplier_name like concat('%', #{supplierName}, '%')</if>
             <if test="deliveryMethod != null "> AND delivery_method = #{deliveryMethod}</if>

+ 7 - 7
src/main/resources/mybatis/business/BizReturnReceiptMapper.xml

@@ -9,15 +9,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <select id="getList" parameterType="BizReturnReceipt" resultMap="BizReturnReceiptResult">
-        SELECT * FROM biz_return_receipt
+        SELECT t1.*,(select is_audit from biz_return_receipt_detail where t1.id =biz_return_receipt_detail.master_id and biz_return_receipt_detail.deleted = 0 limit 1) as isAudit  FROM biz_return_receipt t1
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
-            deleted = 0
-            <if test="supplierId != null and supplierId != ''"> AND supplier_id = #{supplierId}</if>
-            <if test="formCode != null and formCode != ''"> AND form_code LIKE CONCAT('%', #{formCode}, '%')</if>
-            <if test="startTime != null ">AND form_date &gt;= #{startTime}</if>
-            <if test="endTime != null ">AND form_date &lt;= #{endTime}</if>
+            t1.deleted = 0
+            <if test="supplierId != null and supplierId != ''"> AND t1.supplier_id = #{supplierId}</if>
+            <if test="formCode != null and formCode != ''"> AND t1.form_code LIKE CONCAT('%', #{formCode}, '%')</if>
+            <if test="startTime != null ">AND t1.form_date &gt;= #{startTime}</if>
+            <if test="endTime != null ">AND t1.form_date &lt;= #{endTime}</if>
         </trim>
-        order by create_time desc
+        order by t1.create_time desc
     </select>
     <delete id="physicalDelete">
         DELETE FROM biz_return_receipt

BIN
src/main/resources/template/outsourcedReturn.xlsx