From e529b1dd89b5f2927457a284e660d489b9aa8cc8 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期三, 01 四月 2026 11:24:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_长治_健齿齿科器材' into dev_长治_健齿齿科器材

---
 src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java |  141 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 129 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index fab0ebe..52272ad 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -8,17 +8,19 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
-import com.ruoyi.common.enums.StockRecordTypeEnum;
-import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
-import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.security.LoginUser;
-import com.ruoyi.procurementrecord.dto.Details;
-import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
-import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 import com.ruoyi.procurementrecord.service.ProcurementRecordService;
 import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductWorkOrderMapper;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductWorkOrder;
+import com.ruoyi.production.pojo.ProductionProductMain;
 import com.ruoyi.quality.dto.QualityInspectDto;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.mapper.QualityTestStandardMapper;
@@ -29,7 +31,6 @@
 import com.ruoyi.quality.service.IQualityInspectParamService;
 import com.ruoyi.quality.service.IQualityInspectService;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -40,8 +41,8 @@
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
+import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -63,6 +64,15 @@
     private SalesLedgerProductMapper salesLedgerProductMapper;
 
     private ProcurementRecordService procurementRecordService;
+
+    private ProductModelMapper productModelMapper;
+
+    private ProductionProductMainMapper productionProductMainMapper;
+
+    private ProductWorkOrderMapper productWorkOrderMapper;
+
+    private ProductOrderMapper productOrderMapper;
+
 
     @Override
     public int add(QualityInspectDto qualityInspectDto) {
@@ -91,8 +101,26 @@
     @Override
     public int submit(QualityInspect inspect) {
         QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId());
+        ProductionProductMain productionProductMain = productionProductMainMapper.selectById(qualityInspect.getProductMainId());
+
+        String batchNo;
+        String customer;
+        if (productionProductMain != null) {
+            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
+            ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+            batchNo = productOrder.getBatchNo();
+            customer = "闀挎不甯傝酱鎵垮埗閫犳湁闄愬叕鍙�";
+        } else {
+            batchNo = qualityInspect.getBatchNo();
+            customer = qualityInspect.getSupplier();
+        }
+
+        //鎻愪氦鍓嶅繀椤诲垽鏂槸鍚﹀悎鏍�
+        if (ObjectUtils.isNull(qualityInspect.getCheckResult())) {
+            throw new RuntimeException("璇峰厛鍒ゆ柇鏄惁鍚堟牸");
+        }
         /*鍒ゆ柇涓嶅悎鏍�*/
-        if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("涓嶅悎鏍�")) {
+        if (qualityInspect.getCheckResult().equals("涓嶅悎鏍�")) {
             QualityUnqualified qualityUnqualified = new QualityUnqualified();
             BeanUtils.copyProperties(qualityInspect, qualityUnqualified);
             qualityUnqualified.setInspectState(0);//寰呭鐞�
@@ -103,7 +131,9 @@
             qualityUnqualifiedMapper.insert(qualityUnqualified);
         } else {
             //鍚堟牸鐩存帴鍏ュ簱
-            stockUtils.addStock(inspect.getProductModelId(), inspect.getQuantity(), StockRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), inspect.getId());
+            stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(),
+                    qualityInspect.getId(), batchNo, customer
+            );
         }
         qualityInspect.setInspectState(1);//宸叉彁浜�
         return qualityInspectMapper.updateById(qualityInspect);
@@ -177,6 +207,17 @@
 
     @Override
     public IPage<QualityInspect> qualityInspectListPage(Page page, QualityInspect qualityInspect) {
+        IPage<QualityInspect> qualityInspectIPage = qualityInspectMapper.qualityInspectListPage(page, qualityInspect);
+        List<QualityInspect> records = qualityInspectIPage.getRecords();
+        for (int i = 0; i < records.size(); i++) {
+            QualityInspect item = records.get(i);
+            ProductModel productModel = productModelMapper.selectById(item.getProductModelId());
+            if (productModel == null) {
+                continue;
+            }
+            item.setUidNo(productModel.getUidNo());
+        }
+
         return qualityInspectMapper.qualityInspectListPage(page, qualityInspect);
     }
 
@@ -198,5 +239,81 @@
 
     }
 
+    @Override
+    public void downOutReport(HttpServletResponse response, QualityInspect qualityInspect) {
+        QualityInspect inspect = qualityInspectMapper.selectOneData(qualityInspect.getId());
+
+        // 鏍煎紡鍖栨棩鏈熷瓧娈�
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        inspect.setCheckTimeStr(inspect.getCheckTime() != null ? sdf.format(inspect.getCheckTime()) : "");
+        inspect.setProductionDateStr(inspect.getProductionDate() != null ? inspect.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) : "");
+        inspect.setValidityDateStr(inspect.getValidityDate() != null ? inspect.getValidityDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) : "");
+
+        // 鑾峰彇妫�楠屽弬鏁板垪琛�
+        List<QualityInspectParam> paramList = qualityInspectParamService.list(
+                Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
+        int index = 1;
+        for (QualityInspectParam detail : paramList) {
+            detail.setIndex(index);
+            index++;
+        }
+
+        // 鑾峰彇浜у搧鍨嬪彿淇℃伅锛堝寘鍚湁鏁堟湡锛�
+        ProductModel productModel = null;
+        BigDecimal validityPeriod = null;
+        if (inspect.getProductModelId() != null) {
+            productModel = productModelMapper.selectById(inspect.getProductModelId());
+            if (productModel != null) {
+                validityPeriod = productModel.getValidityPeriod();
+            }
+        }
+        /*String calculatedValidityDate = "";
+        if (inspect.getProductionDate() != null && validityPeriod != null) {
+            LocalDate productionDate = inspect.getProductionDate();
+            int years = validityPeriod.intValue();
+            int months = validityPeriod
+                    .subtract(new BigDecimal(years))
+                    .multiply(new BigDecimal(12))
+                    .setScale(0, RoundingMode.HALF_UP)
+                    .intValue();
+            LocalDate calculatedDate = productionDate
+                    .plusYears(years)
+                    .plusMonths(months);
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            calculatedValidityDate = calculatedDate.format(formatter);
+        }*/
+
+        // 妫�楠屼緷鎹細浜у搧鍚嶇О + 鍑哄巶妫�楠屾搷浣滄祦绋�
+        String checkBasis = (inspect.getProductName() != null ? inspect.getProductName() : "") + "鍑哄巶妫�楠屾搷浣滄祦绋�";
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/out-report-template.docx");
+        Configure configure = Configure.builder()
+                .bind("paramList", new HackLoopTableRenderPolicy())
+                .build();
+//        final String finalCalculatedValidityDate = calculatedValidityDate;
+        final String finalCheckBasis = checkBasis;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("inspect", inspect);
+                    put("checkBasis", finalCheckBasis);
+//                    put("calculatedValidityDate", finalCalculatedValidityDate);
+                    put("paramList", paramList);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode("鍑哄簱妫�楠屾姤鍛�", "UTF-8");
+            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+            inputStream.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
 
 }

--
Gitblit v1.9.3