From 217f2eb09985a80f5d972a6fa1205806756711e1 Mon Sep 17 00:00:00 2001
From: 李林 <z1292839451@163.com>
Date: 星期二, 09 四月 2024 18:05:20 +0800
Subject: [PATCH] 报告生成

---
 inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java       |    5 +
 system-run/src/main/resources/application-dev.yml                                      |    4 
 inspect-server/src/main/resources/mapper/InsOrderMapper.xml                            |   26 ++++++--
 inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java                |   10 ++
 inspect-server/src/main/resources/static/report-template.docx                          |    0 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java |  129 +++++++++++++++++++++++++++---------------
 inspect-server/src/main/resources/static/template-table.docx                           |    0 
 7 files changed, 117 insertions(+), 57 deletions(-)

diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java
index c580fc2..e480a74 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/InsReportController.java
@@ -1,6 +1,7 @@
 package com.yuanchu.mom.controller;
 
 import cn.hutool.core.lang.UUID;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.mom.annotation.ValueAuth;
 import com.yuanchu.mom.dto.ReportPageDto;
@@ -18,6 +19,8 @@
 
 import javax.annotation.Resource;
 import java.io.File;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -58,7 +61,7 @@
             if (!realpath.exists()) {
                 realpath.mkdirs();
             }
-            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
+            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
             urlString = realpath + "/" + pathName;
             file.transferTo(new File(urlString));
             return Result.success(insReportService.inReport("/word/"+pathName, id));
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java b/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java
index 5abd147..5c9291d 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java
@@ -7,6 +7,7 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 public class CostStatisticsDto extends OrderBy {
@@ -25,13 +26,13 @@
     private String model;
 
     @ValueTableShow(value = 5, name = "鏍峰搧鏁伴噺")
-    private Integer num = 1;
+    private Integer num;
 
     @ValueTableShow(value = 6, name = "鎬讳环")
     private BigDecimal price;
 
     @ValueTableShow(value = 7, name = "璇曢獙椤圭洰")
-    private String product;
+    private String inspectionItem;
 
     @ValueTableShow(value = 8, name = "濮旀墭鍗曚綅")
     private String company;
@@ -41,4 +42,9 @@
 
     private Integer createUser;
 
+    private Integer insSampleId;
+
+    public Integer getNum() {
+        return num = 1;
+    }
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
index eea8eed..b04240e 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -13,6 +13,10 @@
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
 import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.*;
+import com.deepoove.poi.data.style.TableStyle;
+import com.deepoove.poi.render.Render;
+import com.spire.doc.Table;
 import com.yuanchu.mom.common.GetLook;
 import com.yuanchu.mom.common.PrintChina;
 import com.yuanchu.mom.dto.InsOrderPlanDTO;
@@ -36,6 +40,8 @@
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -121,50 +127,7 @@
         List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
         for (SampleProductDto samples : list) {
             if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
-            for (InsProduct product : samples.getInsProduct()) {
-                if (product.getTemplateId() == null) {
-                    product.setTemplate(new ArrayList<>());
-                    continue;
-                }
-                if (set.add(product.getTemplateId())) {
-                    map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
-                }
-                String thing = map2.get(product.getTemplateId());
-                if (StrUtil.isNotEmpty(thing)) {
-                    JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
-                    JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
-                    List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class);
-                    List<JSONObject> tableData = new ArrayList<>();
-                    Map<String, Object> style = new HashMap<>();
-//                    style.put("borderInfo", config.get("borderInfo"));
-                    style.put("rowlen", config.get("rowlen"));
-                    style.put("columnlen", config.get("columnlen"));
-                    int r = -1;
-                    if (BeanUtil.isNotEmpty(cellData)) {
-                        for (JSONObject o : cellData) {
-                            JSONObject v = JSON.parseObject(JSON.toJSONString(o.get("v")));
-                            if (BeanUtil.isNotEmpty(v.get("ps"))) {
-                                JSONObject ps = JSON.parseObject(JSON.toJSONString(v.get("ps")));
-                                if (ps.get("value").equals("妫�楠岄」") && v.get("v").equals(product.getInspectionItem())) {
-                                    tableData.add(o);
-                                    r = Integer.parseInt(o.get("r") + "");
-                                    continue;
-                                }
-                            }
-                            if (tableData.size() > 0) {
-                                if ((Integer.parseInt(o.get("r") + "") == r + 1 || Integer.parseInt(o.get("r") + "") == r) && !(o.get("v") + "").equals("{\"ht\":\"0\"}")) {
-                                    r = Integer.parseInt(o.get("r") + "");
-                                    tableData.add(o);
-                                } else {
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                    product.setTemplate(tableData);
-                    product.setStyle(style);
-                }
-            }
+            getTemplateThing(set, map2, samples);
         }
         map.put("sampleProduct", list);
         return map;
@@ -263,7 +226,35 @@
             InsOrder insOrder = insOrderMapper.selectById(orderId);
             Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId());
             List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
-            samples.forEach(System.out::println);
+            Set<Integer> set = new HashSet<>();
+            Map<Integer, String> map2 = new HashMap<>();
+            samples.forEach(a->{
+                getTemplateThing(set, map2, a);
+                TableRenderData tableRenderData = new TableRenderData();
+                TableStyle tableStyle = new TableStyle();
+                tableStyle.setWidth("14.63");
+                tableRenderData.setTableStyle(tableStyle);
+                a.getInsProduct().forEach(b->{
+                    System.out.println(b.getTemplate());
+                    System.out.println(b.getStyle());
+                    RowRenderData rowRenderData = new RowRenderData();
+                    CellRenderData cellRenderData = new CellRenderData();
+                    for (JSONObject jo1 : b.getTemplate()) {
+                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+                        List<RenderData> contents = new ArrayList<>();
+                        /*if(Integer.parseInt(jo1.get("r")+"") == r){
+                            if(Integer.parseInt(jo1.get("r")+"") == c){
+                                JSONObject jo2 = JSONObject.parseObject(JSONObject.toJSONString(jo1.get("v")));
+                                TextRenderData textRenderData = new TextRenderData();
+                                textRenderData.setText(jo2.get("v")+"");
+                                contents.add(textRenderData);
+                                paragraphRenderData.setContents(contents);
+                            }
+                        }else if (Integer.parseInt(jo1.get("r")+"") > r){
+                        }*/
+                    }
+                });
+            });
             InsReport insReport = new InsReport();
             insReport.setCode(giveCode.giveCode("JCZX/TX-", "ins_report", "-", "yyMMdd"));
             insReport.setInsOrderId(orderId);
@@ -283,7 +274,7 @@
                     }});
             try {
                 String name = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd_HH_mm_ss")) + ".docx";
-                template.writeAndClose(new FileOutputStream(wordUrl + "/" + name));
+                template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
                 insReport.setUrl("/word/"+ name);
                 insReportMapper.insert(insReport);
             } catch (IOException e) {
@@ -293,6 +284,52 @@
         return 1;
     }
 
+    private void getTemplateThing(Set<Integer> set, Map<Integer, String> map2, SampleProductDto a) {
+        for (InsProduct product : a.getInsProduct()) {
+            if (product.getTemplateId() == null) {
+                product.setTemplate(new ArrayList<>());
+                continue;
+            }
+            if (set.add(product.getTemplateId())) {
+                map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
+            }
+            String thing = map2.get(product.getTemplateId());
+            if (StrUtil.isNotEmpty(thing)) {
+                JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
+                JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
+                List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class);
+                List<JSONObject> tableData = new ArrayList<>();
+                Map<String, Object> style = new HashMap<>();
+                style.put("rowlen", config.get("rowlen"));
+                style.put("columnlen", config.get("columnlen"));
+                int r = -1;
+                if (BeanUtil.isNotEmpty(cellData)) {
+                    for (JSONObject o : cellData) {
+                        JSONObject v = JSON.parseObject(JSON.toJSONString(o.get("v")));
+                        if (BeanUtil.isNotEmpty(v.get("ps"))) {
+                            JSONObject ps = JSON.parseObject(JSON.toJSONString(v.get("ps")));
+                            if (ps.get("value").equals("妫�楠岄」") && v.get("v").equals(product.getInspectionItem())) {
+                                tableData.add(o);
+                                r = Integer.parseInt(o.get("r") + "");
+                                continue;
+                            }
+                        }
+                        if (tableData.size() > 0) {
+                            if ((Integer.parseInt(o.get("r") + "") == r + 1 || Integer.parseInt(o.get("r") + "") == r) && !(o.get("v") + "").equals("{\"ht\":\"0\"}")) {
+                                r = Integer.parseInt(o.get("r") + "");
+                                tableData.add(o);
+                            } else {
+                                break;
+                            }
+                        }
+                    }
+                }
+                product.setTemplate(tableData);
+                product.setStyle(style);
+            }
+        }
+    }
+
     @Override
     public int submitPlan(Integer orderId, String laboratory) {
         List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
diff --git a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
index d168a3a..bb33efa 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -117,13 +117,27 @@
         </if>
     </select>
     <select id="selectCostStatistics" resultType="com.yuanchu.mom.dto.CostStatisticsDto">
-        select * from {
-        SELECT io.id,io.entrust_code,io.create_time,isa.sample,isa.model,ip.price,ip.inspection_item,u.company,u.`name`,io.create_user from ins_order io
-        LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
+        select * from (
+        SELECT
+        i.id,
+        i.entrust_code,
+        i.create_time,
+        isa.sample,
+        isa.model,
+        c.price,
+        ip.inspection_item,
+        u.company,
+        u.`name`,
+        i.create_user,
+        c.ins_sample_id
+        FROM
+        ins_order i
+        LEFT JOIN ins_sample isa ON isa.ins_order_id = i.id
         LEFT JOIN ins_product ip ON ip.ins_sample_id = isa.id
-        LEFT JOIN `user` u ON u.id = io.user_id
-#         where (io.state = 3 OR io.state = 4)
-        } a
+        LEFT JOIN `user` u ON u.id = i.user_id
+        LEFT JOIN (select SUM(b.price) price,b.ins_sample_id from (select * from ins_product where state = 1 GROUP BY ins_sample_id,man_hour_group) b GROUP BY b.ins_sample_id) c ON c.ins_sample_id = isa.id
+        where ip.state = 1
+        ) a
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
diff --git a/inspect-server/src/main/resources/static/report-template.docx b/inspect-server/src/main/resources/static/report-template.docx
index 29a4f45..48fbcd4 100644
--- a/inspect-server/src/main/resources/static/report-template.docx
+++ b/inspect-server/src/main/resources/static/report-template.docx
Binary files differ
diff --git a/inspect-server/src/main/resources/static/template-table.docx b/inspect-server/src/main/resources/static/template-table.docx
new file mode 100644
index 0000000..397c507
--- /dev/null
+++ b/inspect-server/src/main/resources/static/template-table.docx
Binary files differ
diff --git a/system-run/src/main/resources/application-dev.yml b/system-run/src/main/resources/application-dev.yml
index eb33049..2b36d65 100644
--- a/system-run/src/main/resources/application-dev.yml
+++ b/system-run/src/main/resources/application-dev.yml
@@ -18,11 +18,11 @@
 
 # 鐓х墖瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
 file:
-  path: D:\Download
+  path: D:\Download\鍏徃瀛樺偍鍦板潃
   # 涓婁紶鏂囦欢鍏佽鐨勬墿灞曞悕
   allowed: png,jpg,jpeg,gif
 
-wordUrl: D:\Download
+wordUrl: D:\Download\鍏徃瀛樺偍鍦板潃
 
 mybatis-plus:
   type-aliases-package: com.yuanchu.mom.pojo

--
Gitblit v1.9.3