From e06dd714c249b3f2dffd084d222ad073344a656c Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 07 八月 2024 13:57:56 +0800
Subject: [PATCH] 检验下单权限+工时

---
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java |  628 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 591 insertions(+), 37 deletions(-)

diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
index ee5067f..72267d5 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -2,32 +2,42 @@
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.mom.common.GetLook;
 import com.yuanchu.mom.common.PrintChina;
-import com.yuanchu.mom.dto.CostStatisticsDto;
-import com.yuanchu.mom.dto.SampleOrderDto;
-import com.yuanchu.mom.dto.SampleProductDto;
-import com.yuanchu.mom.dto.SampleProductDto2;
+import com.yuanchu.mom.dto.*;
 import com.yuanchu.mom.exception.ErrorException;
 import com.yuanchu.mom.mapper.*;
 import com.yuanchu.mom.pojo.*;
 import com.yuanchu.mom.service.InsOrderService;
+import com.yuanchu.mom.service.InsProductService;
 import com.yuanchu.mom.utils.GiveCode;
 import com.yuanchu.mom.utils.QueryWrappers;
 import com.yuanchu.mom.vo.SampleDefectsFatherVo;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -47,54 +57,105 @@
     private InsSampleMapper insSampleMapper;
 
     private InsProductMapper insProductMapper;
+    private InsProductService insProductService;
+
+    private InsProductUserMapper insProductUserMapper;
 
     private GiveCode giveCode;
 
     private InsSampleUserMapper insSampleUserMapper;
 
     private InsOrderStateMapper insOrderStateMapper;
-    
-   
- 
+
+    UserMapper userMapper;
+
+    PowerMapper powerMapper;
+
+    private InsBushingMapper insBushingMapper;
+
+    private InsFibersMapper insFibersMapper;
+
+    private InsFiberMapper insFiberMapper;
+
+    CustomMapper customMapper;
+
 
     //鑾峰彇妫�楠屼笅鍗曟暟鎹�
     @Override
     public Map<String, Object> selectInsOrderParameter(IPage<InsOrder> page, SampleOrderDto sampleOrderDto) {
         Map<String, Object> map = new HashMap<>();
         map.put("head", PrintChina.printChina(SampleOrderDto.class));
+        //鍒ゆ柇鍏ㄩ儴,涓汉,缁勭粐鐨勬潈闄�
         Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
-        if (map1.get("look") == 1) sampleOrderDto.setCreateUser(map1.get("userId"));
-        map.put("body", insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto)));
+        User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
+        Integer roleId = user.getRoleId();
+        //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id
+        String departLimsId = user.getDepartLimsId();
+        String laboratory = null;
+        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
+            String[] split = departLimsId.split(",");
+            //鏌ヨ瀵瑰簲鏋舵瀯鍚嶇О(閫氫俊瀹為獙瀹�,鐢靛姏瀹為獙瀹�,妫�娴嬪姙)
+            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
+            if (departLims.contains("瀹為獙瀹�")) {
+                laboratory = departLims;
+            }
+        }
+        //鍒ゆ柇鏄惁鏄叏閮ㄦ潈闄�
+        Power power = powerMapper.selectOne(Wrappers.<Power>lambdaQuery().eq(Power::getRoleId, roleId).eq(Power::getMenuMethod, "selectAllInsOrderParameter"));
+        if (ObjectUtils.isEmpty(power)) {
+            if (map1.get("look") == 1) {
+                //涓汉
+                sampleOrderDto.setCreateUser(map1.get("userId"));
+            } else {
+                //缁勭粐
+                try {
+                    sampleOrderDto.setCompany(customMapper.selectById(user.getCompany()).getCompany());
+                } catch (NullPointerException e) {
+                    throw new ErrorException("鎵句笉鍒版墍灞炲崟浣�");
+                }
+            }
+        }
+        IPage<SampleOrderDto> sampleOrderDtoIPage = insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory);
+        sampleOrderDtoIPage.getRecords().forEach(i -> {
+            if (i.getSampleCode().contains("锛�")) {
+                String[] split = i.getSampleCode().split("锛�");
+                i.setSampleCode(split[0]);
+            }
+        });
+        map.put("body", sampleOrderDtoIPage);
         return map;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId) {
+    public int upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId, String sonLaboratory) {
         InsOrder insOrder = new InsOrder();
         insOrder.setId(orderId);
         insOrder.setAppointed(LocalDate.parse(appointed));
         insOrder.setSendTime(LocalDateTime.now());
         insOrderMapper.updateById(insOrder);
-        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
-        List<Integer> ids = insSamples.stream().map(a-> a.getId()).collect(Collectors.toList());
-        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getState, 1).select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
+        List<InsSample> insSamples =
+                insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
+        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
+        List<InsProduct> insProducts =
+                insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().in(InsProduct::getInsSampleId, ids).eq(InsProduct::getState, 1).isNull(InsProduct::getInsFibersId).isNull(InsProduct::getInsFiberId).select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
         for (InsProduct insProduct : insProducts) {
             InsOrderState insOrderState = new InsOrderState();
             insOrderState.setInsOrderId(orderId);
             try {
                 insOrderState.setLaboratory(insProduct.getSonLaboratory());
-            }catch (NullPointerException e){
+            } catch (NullPointerException e) {
                 throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
             }
             insOrderState.setInsState(0);
             insOrderStateMapper.insert(insOrderState);
         }
-        if(userId!=null){
+        if (userId != null) {
             InsSampleUser insSampleUser = new InsSampleUser();
             insSampleUser.setState(0);
             insSampleUser.setUserId(userId);
             insSampleUser.setInsSampleId(orderId);
+            insSampleUser.setSonLaboratory(sonLaboratory);
             insSampleUserMapper.insert(insSampleUser);
         }
         return 1;
@@ -102,41 +163,391 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder) {
+    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing) {
         insOrder.setState(0);
-        String code = insOrderMapper.getLaboratoryCode(insOrder.getLaboratory());
-        insOrder.setEntrustCode(giveCode.giveCode("JCZX-" + code + "-", "ins_order", "-", "yyyyMMdd"));
+        //鍒ゆ柇閫夋嫨鐨勫鎵樺崟浣嶄笌鍒跺崟浜虹殑濮旀墭鍗曚綅鏄惁涓�鑷�
+        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+        String company = userMapper.selectById(userId).getCompany();
+        if (!company.equals(insOrder.getCompanyId()+"")) {
+            //濡傛灉涓嶄竴鑷撮偅涔堝鎵樹汉瀛楁蹇呭~
+            if (ObjectUtils.isEmpty(insOrder.getPrepareUser())){
+                throw new ErrorException("濮旀墭浜轰笉鑳戒负绌�");
+            }
+        }else {
+            //濡傛灉涓�鑷�,閭d箞鍒跺崟浜哄氨鏄鎵樹汉
+            insOrder.setPrepareUser(insOrder.getCustom());
+        }
+        //瀹㈡埛浠e彿
+        Custom custom = customMapper.selectById(insOrder.getCompanyId());
+        String code = custom.getCode2();
+        if (!custom.getCompany().equals(insOrder.getCompany())){
+            Custom one = customMapper.selectOne(Wrappers.<Custom>lambdaQuery().eq(Custom::getCompany, insOrder.getCompany()));
+            insOrder.setCompanyId(one.getId());
+            code=one.getCode2();
+        }
+        //瀹為獙瀹ょ紪鍙�
+        String code2 = baseMapper.selLaboratoryCode(insOrder.getLaboratory());
+        if (StringUtils.isEmpty(code2)) {
+            code2 = "";
+        }
+        //澶栭儴濮旀墭缂栧彿
+        insOrder.setOutEntrustCode(giveCode.giveCode3("ZT/" + code2 + "-" + code + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
+        String giveCode = this.giveCode.giveCode("JCZX-" + code + "-", "ins_sample", "", "yyMMdd");
         insOrderMapper.insert(insOrder);
+        AtomicInteger count = new AtomicInteger();
         list.forEach(a -> {
+            count.getAndIncrement();
             a.setId(null);
             a.setInsOrderId(insOrder.getId());
-            if(StrUtil.isEmpty(a.getSampleCode())){
-                a.setSampleCode(giveCode.giveCode("", "ins_sample", "", "yyMMdd"));
+            if (StrUtil.isEmpty(a.getSampleCode())) {
+                a.setSampleCode(giveCode.split("-")[2] + "-" + count.get());
             }
             insSampleMapper.insert(a);
             if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
-                for (InsProduct product : a.getInsProduct()) {
-                    product.setId(null);
-                    product.setCreateTime(null);
-                    product.setUpdateTime(null);
-                    product.setUpdateTime(null);
-                    product.setUpdateUser(null);
-                    product.setInsSampleId(a.getId());
-                    if(product.getInspectionItemSubclass() == null){
-                        product.setInspectionItemSubclass("");
+                addInsProductMethod(a.getId(), a.getInsProduct(), null, 0, false);
+                if (ObjectUtil.isNotEmpty(a.getBushing())) {
+                    for (BushingDto bushingDto : a.getBushing()) {
+                        bushingDto.setInsSampleId(a.getId());
+                        insBushingMapper.insert(bushingDto);
+                        //鍏夌氦涓嶄负绌�
+                        if (bushingDto.getFiber().size() != 0) {
+                            for (FiberDto fiberDto : bushingDto.getFiber()) {
+                                fiberDto.setInsBushingId(bushingDto.getId());
+                                insFiberMapper.insert(fiberDto);
+                                addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
+                                addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                            }
+                        }
+                        //鍏夌氦甯︿笉涓虹┖
+                        else if ( bushingDto.getFibers().size()!=0){
+                            for (FibersDto fibersDto : bushingDto.getFibers()) {
+                                fibersDto.setInsBushingId(bushingDto.getId());
+                                fibersDto.setCode(this.giveCode.giveCode("", "ins_fibers", "", "yyMMdd"));
+                                insFibersMapper.insert(fibersDto);
+                                for (FiberDto fiberDto : fibersDto.getFiber()) {
+                                    fiberDto.setInsFibersId(fibersDto.getId());
+                                    insFiberMapper.insert(fiberDto);
+                                    addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
+                                    addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                                }
+                                //addInsProductMethod(a.getId(), a.getInsProduct(), fibersDto.getId(), 1);
+                                addInsProductMethod(a.getId(), fibersDto.getProductList(), fibersDto.getId(), 1, false);
+                            }
+                        }
+                        //閮戒负绌� 鍙厤缃簡濂楃 杩欑鎯呭喌鍙檺浜庨」鐩槸鍚湁鏉惧绠$殑
+//                        else {
+//                            String collect = a.getInsProduct().stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.joining(","));
+//                            if (collect.contains("鏉惧绠�")){
+//                                //鑾峰彇妫�楠岄」鐩腑鍖呭惈鏉惧绠$殑妫�楠岄」鐩�
+//                                List<InsProduct> products = a.getInsProduct().stream().filter(insProduct -> insProduct.getInspectionItem().contains("鏉惧绠�")).collect(Collectors.toList());
+//                                for (InsProduct product : products) {
+//                                    product.setInsBushId(bushingDto.getId());
+//                                    product.setId(null);
+//                                    product.setCreateTime(null);
+//                                    product.setCreateUser(null);
+//                                    product.setUpdateTime(null);
+//                                    product.setUpdateUser(null);
+//                                    product.setInsSampleId(a.getId());
+//                                    if (product.getInspectionItemSubclass() == null) {
+//                                        product.setInspectionItemSubclass("");
+//                                    }
+//                                    insProductMapper.insert(product);
+//                                }
+//                            }else {
+//                                throw new ErrorException("鏍峰搧鐨勫厜绾ら厤缃俊鎭噷闈㈡病鏈夐厤缃厜绾ゅ甫淇℃伅涔熸病鏈夊厜绾や俊鎭�,璇烽噸鏂伴厤缃繚瀛樺啀鎻愪氦涓嬪崟!!!");
+//                            }
+//                        }
                     }
-                    insProductMapper.insert(product);
+                }
+            }
+            if (ObjectUtil.isNotEmpty(a.getInsulating())) {
+                List<InsProduct> ip2 = new ArrayList<>();
+                for (Integer i = 0; i < a.getInsulating().getNum(); i++) {
+                    ip2.addAll(a.getInsulating().getInsProduct());
+                }
+                for (InsProduct product : ip2) {
+                    product.setStandardMethodListId(a.getInsulating().getStandardMethodListId());
+                }
+                addInsProductMethod(a.getId(), ip2, null, 0, false);
+            }
+            if (ObjectUtil.isNotEmpty(a.getSheath())) {
+                for (InsProduct product : a.getSheath().getInsProduct()) {
+                    product.setStandardMethodListId(a.getSheath().getStandardMethodListId());
+                }
+                addInsProductMethod(a.getId(), a.getSheath().getInsProduct(), null, 0, false);
+            }
+            if (ObjectUtil.isNotEmpty(a.getChildSampleList())) {
+                for (SampleProductDto b : a.getChildSampleList()) {
+                    for (int i = 0; i < b.getNum(); i++) {
+                        b.setId(null);
+                        b.setInsOrderId(insOrder.getId());
+                        b.setParentId(a.getId());
+                        if (StrUtil.isEmpty(b.getSampleCode())) {
+                            b.setSampleCode(this.giveCode.giveCode("", "ins_sample", "", "yyMMdd"));
+                        }
+                        insSampleMapper.insert(b);
+                        if (ObjectUtil.isNotEmpty(b.getInsProduct())) {
+                            addInsProductMethod(b.getId(), b.getInsProduct(), null, 0, false);
+                        }
+                    }
+                }
+            }
+            if (ObjectUtil.isEmpty(a.getInsProduct()) && ObjectUtil.isNotEmpty(a.getBushing())) {
+                for (BushingDto bushingDto : a.getBushing()) {
+                    bushingDto.setInsSampleId(a.getId());
+                    insBushingMapper.insert(bushingDto);
+                    if (bushingDto.getFiber().size() != 0) {
+                        for (FiberDto fiberDto : bushingDto.getFiber()) {
+                            fiberDto.setInsBushingId(bushingDto.getId());
+                            insFiberMapper.insert(fiberDto);
+                            addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                        }
+                    } else {
+                        for (FibersDto fibersDto : bushingDto.getFibers()) {
+                            fibersDto.setInsBushingId(bushingDto.getId());
+                            fibersDto.setCode(this.giveCode.giveCode("", "ins_fibers", "", "yyMMdd"));
+                            insFibersMapper.insert(fibersDto);
+                            for (FiberDto fiberDto : fibersDto.getFiber()) {
+                                fiberDto.setInsFibersId(fibersDto.getId());
+                                insFiberMapper.insert(fiberDto);
+                                addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
+                            }
+                            addInsProductMethod(a.getId(), fibersDto.getProductList(), fibersDto.getId(), 1, false);
+                        }
+                    }
                 }
             }
         });
+        for (List<Integer> i : pairing) {
+            SampleProductDto sample = JSON.parseObject(JSON.toJSONString(list.get(i.get(0) - 1)), SampleProductDto.class);
+            sample.setSampleCode(list.get(i.get(0) - 1).getSampleCode() + "/" + list.get(i.get(1) - 1).getSampleCode());
+            sample.setId(null);
+            insSampleMapper.insert(sample);
+            try {
+                List<InsProduct> insProducts = sample.getInsProduct().stream().filter(a -> Objects.equals(a.getInspectionItem(), "鍏夌氦鎺ュご鎹熻��")).collect(Collectors.toList());
+                for (InsProduct insProduct : insProducts) {
+                    insProduct.setId(null);
+                    insProduct.setInsSampleId(sample.getId());
+                    insProductMapper.insert(insProduct);
+                }
+            } catch (Exception e) {
+            }
+        }
         return insOrder.getId();
+    }
+
+    private void addInsProductMethod(Integer sampleId, List<InsProduct> productList, Integer id, Integer type, Boolean is) {
+        InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(sampleId).getInsOrderId());
+        String name = insSampleMapper.selMethodById(sampleId);
+        for (InsProduct product : productList) {
+//            if (product.getInspectionItem().contains("鏉惧绠�")){
+//                continue;
+//            }
+            if (product.getState() == 1 && !product.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) {
+                //鍒ゆ柇鍏夌紗鐨勬俯搴﹀惊鐜」鐩坊鍔�
+                if (insOrder.getSampleType().equals("鍏夌紗") && product.getInspectionItem().equals("娓╁害寰幆") && type != 0) {
+                    //鍒ゆ柇閫夋嫨鐨勬爣鍑嗘柟娉曟槸濮旀墭瑕佹眰杩樻槸鍏朵粬鏍囧噯鏂规硶
+                    if (!name.equals("濮旀墭瑕佹眰")) {
+                        //鍒ゆ柇鏍囧噯鏂规硶鐨勬俯搴﹀惊鐜殑瑕佹眰鎻忚堪鏄惁鏈夊~鍐�
+                        if (ObjectUtils.isEmpty(product.getTell()) || product.getTell().equals("")) {
+                            throw new ErrorException("鍏夌紗鐨勬俯搴﹀惊鐜殑瑕佹眰鎻忚堪涓虹┖,闇�瑕佸湪鏍囧噯搴撻厤缃姹傛弿杩�!!!");
+                        } else {
+                            //瑙f瀽(娓╁害鑼冨洿锛�20鈩冿紝-40鈩冿紝65鈩冿紱淇濇俯鏃堕棿锛�12h锛� 寰幆娆℃暟锛�2娆★紱 鍏夌氦锛�1310nm锛�1550nm锛夐檮鍔犺“鍑忎笉澶т簬0.03dB/km)
+                            String tell = product.getTell().replace("锛�", ")")
+                                    .replace("(", "锛�")
+                                    .replace(")", "锛�")
+                                    .replace("锛�", ",")
+                                    .replace("锛�", ":")
+                                    .replace("锛�", ";")
+                                    .replace("涓嶅ぇ浜�", "鈮�")
+                                    .replace("涓嶅皬浜�", "鈮�")
+                                    .replace("澶т簬", ">")
+                                    .replace("灏忎簬", "<")
+                                    .replace("绛変簬", "=");
+                            String[] message=null;
+                            String[] nm=null;
+                            String ask=null;
+                            String count=null;
+                            try {
+                                String[] strings = tell.split(";");
+                                //娓╁害
+                                String temperature = strings[0];
+                                String[] split = temperature.split(":");
+                                 message = split[1].split(",");
+                                //寰幆娆℃暟
+                                 count = strings[2].split(":")[1].split("娆�")[0];
+                                //鍏夌氦椤圭洰鍜岃姹傚��
+                                String string = strings[3];
+                                 nm = string.split("锛�")[1].split("锛�")[0].split(",");
+                                 ask = string.split("琛板噺")[1].split("dB")[0];
+                            }catch (Exception e){
+                                throw new ErrorException("娓╁害寰幆鐨勮姹傛弿杩版牸寮忓紓甯�,璇峰弬鐓ф俯搴﹁寖鍥达細20鈩冿紝-40鈩冿紝65鈩冿紱淇濇俯鏃堕棿锛�12h锛� 寰幆娆℃暟锛�2娆★紱 鍏夌氦锛�1310nm锛�1550nm锛夐檮鍔犺“鍑忎笉澶т簬0.03dB/km");
+                            }
+                            //鎷兼帴
+                            String s="";
+                            for (int i = 0; i < nm.length; i++) {
+                                 s+= "20鈩�(甯告俯)," + nm[i] + ",null;";
+                                for (int j = 0; j < message.length; j++) {
+                                    s+= message[j] + "," + nm[i] + "," + ask + ";" ;
+                                }
+                            }
+                            s+=count;
+                            product.setAsk(s);
+                            insProductMapper.updateById(product);
+                            dealWithTemperatureLoop(type,id,sampleId,product);
+                        }
+                    }
+                    else {
+                        //20鈩�(甯告俯),1310nm,null;-40鈩�,1310nm,鈮�0.2;75鈩�,1310nm,<0.3;20鈩�,1310nm,鈮�0.1;20鈩�(甯告俯),1550nm,null;-40鈩�,1550nm,鈮�0.2;75鈩�,1550nm,<0.3;20鈩�,1550nm,鈮�0.1;3
+                        dealWithTemperatureLoop(type,id,sampleId,product);
+                    }
+                }
+                //鍒ゆ柇鐑惊鐜」鐩殑娣诲姞鍜屾俯鍗囪瘯楠岄」鐩殑娣诲姞
+                else if (product.getInspectionItem().equals("鐑惊鐜�") || product.getInspectionItem().equals("娓╁崌璇曢獙")) {
+                    List<InsProduct> insProductess = new ArrayList<>();
+                    product.setId(null);
+                    product.setInsSampleId(sampleId);
+                    insProductess.add(product);
+                    List<InsProduct> insProductes = new ArrayList<>();
+                    List<InsProduct> insProducts = new ArrayList<>();
+                    String[] strings = product.getAsk().split(";");
+                    //寰幆娆℃暟
+                    int count = Integer.parseInt(strings[strings.length - 1]);
+                    for (int i = 0; i < strings.length - 1; i++) {
+                        String[] split = strings[i].split(",");
+                        InsProduct insProduct = new InsProduct();
+                        insProduct.setInspectionItem("1");//妫�楠岀埗椤�--寰幆娆℃暟
+                        insProduct.setInspectionItemSubclass(split[0]);//妫�楠屽瓙椤�--鐜娓╁害/瀵肩嚎娓╁害/鑰愬紶娓╁害/鎺ョ画娓╁害
+                        insProduct.setInspectionItemSubclassEn(split[1]);//妫�楠屽瓙椤硅嫳鏂�--鐜娓╁害/瀵肩嚎娓╁害/鑰愬紶娓╁害/鎺ョ画娓╁害
+                        insProduct.setAsk(null);//妫�楠岃姹�
+                        insProduct.setTell(null);//妫�楠屾弿杩�
+                        insProduct.setInsSampleId(sampleId);
+                        insProduct.setState(1);
+                        insProduct.setFactory(product.getFactory());
+                        insProduct.setLaboratory(product.getLaboratory());
+                        insProduct.setSampleType(product.getSampleType());
+                        insProduct.setSample(product.getSample());
+                        insProduct.setModel(product.getModel());
+                        insProduct.setSonLaboratory(product.getSonLaboratory());
+                        insProduct.setUnit("鈩�");//鍗曚綅
+                        insProduct.setManHourGroup(product.getManHourGroup());
+                        insProduct.setInspectionItemType("0");
+                        insProduct.setInspectionValueType("1");
+                        if (product.getInspectionItem().equals("鐑惊鐜�")) {
+                            insProduct.setInspectionItemClass("鐩存祦鐢甸樆");//妫�楠屽瓙瀛愰」--鐩存祦鐢甸樆
+                            insProduct.setInspectionItemClassEn("DC resistance");//妫�楠屽瓙瀛愰」鑻辨枃--鐩存祦鐢甸樆
+                            insProduct.setUnit("惟/km");//鍗曚綅
+                        }
+                        insProducts.add(insProduct);
+                        insProductes.add(insProduct);
+                        insProductess.add(insProduct);
+                    }
+                    //鐑惊鐜墠鏈夊娆″惊鐜鏁�
+                    if (count > 1) {
+                        //寰幆瓒呰繃1娆�
+                        for (int j = 2; j <= count; j++) {
+                            for (InsProduct insProduct : insProductes) {
+                                InsProduct insProduct1 = new InsProduct();
+                                BeanUtils.copyProperties(insProduct, insProduct1);
+                                insProduct1.setInspectionItem(j + "");//寰幆娆℃暟
+                                insProductess.add(insProduct1);
+                            }
+                        }
+                    }
+                    insProductService.saveBatch(insProductess);
+                }
+                else {
+                    if (!is) {
+                        switch (type) {
+                            case 1:
+                                product.setInsFibersId(id);
+                                break;
+                            case 2:
+                                product.setInsFiberId(id);
+                                break;
+                        }
+                        product.setId(null);
+                        product.setCreateTime(null);
+                        product.setCreateUser(null);
+                        product.setUpdateTime(null);
+                        product.setUpdateUser(null);
+                        product.setInsSampleId(sampleId);
+                        if (product.getInspectionItemSubclass() == null) {
+                            product.setInspectionItemSubclass("");
+                        }
+                        insProductMapper.insert(product);
+                    }
+                }
+            }
+        }
+    }
+
+    //娓╁害寰幆鐨勫鐞�
+    private void dealWithTemperatureLoop(Integer type, Integer id,Integer sampleId,InsProduct product) {
+        List<InsProduct> insProductes = new ArrayList<>();
+        List<InsProduct> insProducts = new ArrayList<>();
+        String[] strings = product.getAsk().split(";");
+        for (int i = 0; i < strings.length; i++) {
+            int count = Integer.parseInt(strings[strings.length - 1]);
+            if (i != strings.length - 1) {
+                InsProduct insProduct = new InsProduct();
+                switch (type) {
+                    case 1:
+                        insProduct.setInsFibersId(id);
+                        break;
+                    case 2:
+                        insProduct.setInsFiberId(id);
+                        break;
+                }
+                String[] split = strings[i].split(",");
+                if (split[0].equals("20鈩�")) {
+                    insProduct.setInspectionItem(count + "");//妫�楠岄」--寰幆娆℃暟
+                } else {
+                    insProduct.setInspectionItem("1");//妫�楠岄」--寰幆娆℃暟
+                }
+                insProduct.setInspectionItemSubclass(split[0]);//妫�楠岄」--娓╁害
+                insProduct.setInspectionItemClass(split[1]);//妫�楠岄」--鍏夌氦椤圭洰
+                insProduct.setAsk(split[2]);//妫�楠岃姹�
+                insProduct.setTell(strings[i]);//妫�楠屾弿杩�
+                insProduct.setInsSampleId(sampleId);
+                insProduct.setState(1);
+                insProduct.setFactory(product.getFactory());
+                insProduct.setLaboratory(product.getLaboratory());
+                insProduct.setSampleType(product.getSampleType());
+                insProduct.setSample(product.getSample());
+                insProduct.setModel(product.getModel());
+                insProduct.setSonLaboratory(product.getSonLaboratory());
+                insProduct.setUnit(product.getUnit());
+                insProduct.setManHourGroup(product.getManHourGroup());
+                insProduct.setInspectionItemType("0");
+                insProduct.setInspectionValueType("1");
+                insProducts.add(insProduct);
+                insProductes.add(insProduct);
+            } else {
+                //鏈�鍚庝竴涓暟鎹槸璇存槑浼氬惊鐜灏戞
+                if (count > 1) {
+                    //寰幆瓒呰繃1娆�
+                    for (int j = 2; j <= count; j++) {
+                        for (InsProduct insProduct : insProducts) {
+                            if (!insProduct.getInspectionItemSubclass().equals("20鈩�") && !insProduct.getInspectionItemSubclass().equals("20鈩�(甯告俯)")) {
+                                InsProduct insProduct1 = new InsProduct();
+                                BeanUtils.copyProperties(insProduct, insProduct1);
+                                insProduct1.setInspectionItem(j + "");
+                                insProductes.add(insProduct1);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        insProductService.saveBatch(insProductes);
     }
 
     @Override
     public Map<String, Object> getInsOrder(Integer id) {
         Map<String, Object> map = new HashMap<>();
         InsOrder insOrder = insOrderMapper.selectById(id);
-        List<SampleProductDto> list = insSampleMapper.selectSampleProductListByOrderId(id);
+        List<SampleProductDto> list = insSampleMapper.selectSampleProductListByOrderId2(id);
         map.put("insOrder", insOrder);
         map.put("sampleProduct", list);
         return map;
@@ -145,6 +556,22 @@
     @Override
     public int upInsOrderOfState(InsOrder insOrder) {
         insOrder.setExamineTime(LocalDateTime.now());
+        if (insOrder.getState() == 1) {
+            //瀹℃牳閫氳繃鎵嶄細鐢熸垚濮旀墭缂栧彿
+            String code = baseMapper.selLaboratoryCode(insOrder.getLaboratory());
+            if (StringUtils.isEmpty(code)) {
+                code = "";
+            }
+            Custom custom = customMapper.selectById(insOrder.getCompanyId());
+            String code2 = custom.getCode2();
+            if (!custom.getCompany().equals(insOrder.getCompany())){
+                Custom one = customMapper.selectOne(Wrappers.<Custom>lambdaQuery().eq(Custom::getCompany, insOrder.getCompany()));
+                insOrder.setCompanyId(one.getId());
+                code2=one.getCode2();
+            }
+            //String code2 = customMapper.selectById(insOrder.getCompanyId()).getCode2();
+            insOrder.setEntrustCode(giveCode.giveCode2("JCZX/" + code + "-" + code2 + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
+        }
         return insOrderMapper.updateById(insOrder);
     }
 
@@ -153,8 +580,21 @@
         Map<String, Object> map = new HashMap<>();
         InsOrder insOrder = insOrderMapper.selectById(id);
         List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
+        for (SampleProductDto sampleProductDto : list) {
+            List<Integer> ids = sampleProductDto.getInsProduct().stream().map(InsProduct::getId).collect(Collectors.toList());
+            List<InsProductUser> insProductUsers = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery()
+                    .in(InsProductUser::getInsProductId, ids));
+            if (CollectionUtils.isNotEmpty(insProductUsers)) {
+                List<Integer> userIds = insProductUsers.stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
+                String collect = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
+                sampleProductDto.setCheckName(collect);
+            }
+        }
         map.put("insOrder", insOrder);
         map.put("sampleProduct", list);
+        //鏌ヨ鎵�鏈夎褰曟ā鐗堝幓閲�
+        List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
+        map.put("reportModel", list2);
         return map;
     }
 
@@ -162,7 +602,19 @@
     public Map<String, Object> selectSampleAndProductByOrderId(IPage<SampleProductDto2> page, SampleProductDto2 sampleProductDto) {
         Map<String, Object> map = new HashMap<>();
         map.put("head", PrintChina.printChina(SampleProductDto2.class));
-        map.put("body", insOrderMapper.selectSampleAndProductByOrderId(page, QueryWrappers.queryWrappers(sampleProductDto)));
+        IPage<SampleProductDto2> productDto2IPage = insOrderMapper.selectSampleAndProductByOrderId(page, QueryWrappers.queryWrappers(sampleProductDto));
+        for (SampleProductDto2 record : productDto2IPage.getRecords()) {
+            InsProductUser insProductUser = insProductUserMapper.selectOne(Wrappers.<InsProductUser>lambdaQuery()
+                    .eq(InsProductUser::getInsProductId, record.getInsProductId())
+                    .orderByDesc(InsProductUser::getCreateTime)
+                    .last("limit 1"));
+            if (ObjectUtils.isNotEmpty(insProductUser)){
+                record.setCheckName(userMapper.selectById(insProductUser.getCreateUser()).getName());
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                record.setCheckTime(insProductUser.getCreateTime().format(formatter));
+            }
+        }
+        map.put("body",productDto2IPage);
         return map;
     }
 
@@ -175,9 +627,39 @@
         map.put("head", PrintChina.printChina(CostStatisticsDto.class));
         Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("costStatistics");
         if (map1.get("look") == 1) costStatisticsDto.setCreateUser(map1.get("userId"));
-        map.put("body", insOrderMapper.selectCostStatistics(page, QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1]+" 23:59:59")));
+        IPage<CostStatisticsDto> dtoIPage = insOrderMapper.selectCostStatistics(page, QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
+        List<CostStatisticsDto> collect = dtoIPage.getRecords().stream().map(dto -> {
+            Set<String> uniqueTags = new HashSet<>();
+            if (dto.getInspectionItem().contains(",")) {
+                for (String s : dto.getInspectionItem().split(",")) {
+                    uniqueTags.add(s.split("@")[0]);
+                }
+            } else {
+                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
+            }
+            dto.setInspectionItem(uniqueTags.toString());
+            return dto;
+        }).collect(Collectors.toList());
+        dtoIPage.setRecords(collect);
+        map.put("body", dtoIPage);
         return map;
     }
+
+    @Override
+    public Map<String, Object> costStatistics2(CostStatisticsDto costStatisticsDto) {
+        Map<String, Object> map = new HashMap<>();
+        String dates = costStatisticsDto.getDates();
+        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
+        costStatisticsDto.setDates(null);
+        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
+        double totalPrice = costStatisticsDtos.stream()
+                .filter(dto -> dto.getPrice() != null) // 杩囨护鎺変环鏍间负 null 鐨勫璞�
+                .mapToDouble(value -> value.getPrice().doubleValue() * value.getNum())
+                .sum();
+        map.put("total", totalPrice);
+        return map;
+    }
+
     @Override
     public Map<String, Object> selectSampleDefects(Page page, String inspectionItems, String orderNumber) {
         List<SampleDefectsFatherVo> sampleDefectsFatherVos = insOrderMapper.selectSampleDefects(page, inspectionItems, orderNumber);
@@ -190,7 +672,79 @@
 
     @Override
     public int updateStatus(Integer id) {
-   return  insOrderMapper.updateStatus(id);
+        return insOrderMapper.updateStatus(id);
+    }
+
+    //鏍囩鎵撳嵃
+    @Override
+    public List<SampleProductDto3> labelPrinting(String ids) {
+        List<Integer> list = Arrays.stream(ids.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+        List<SampleProductDto3> sampleProductDtos = insSampleMapper.selectSampleProductListByOrderId3(list);
+        Set<String> processedCodes = new HashSet<>();
+        //濡傛灉鏄厜绾ゆ垨鑰呮槸鍏夌氦甯﹂粯璁ゅ彧鎵撳嵃绗竴涓�
+        List<SampleProductDto3> sampleProductDto3s = sampleProductDtos.stream().filter(sampleProductDto3 -> {
+            if (!"鍏夌氦".equals(sampleProductDto3.getIoSampleType()) && !"鍏夌氦甯�".equals(sampleProductDto3.getIoSampleType())) {
+                return true;
+            }
+            if (processedCodes.contains(sampleProductDto3.getCode())) {
+                return false;
+            } else {
+                processedCodes.add(sampleProductDto3.getCode());
+                return true;
+            }
+        }).collect(Collectors.toList());
+        return sampleProductDto3s;
+    }
+
+    @Override
+    public void export(CostStatisticsDto costStatisticsDto, HttpServletResponse response) throws IOException {
+        //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
+        String dates = costStatisticsDto.getDates();
+        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
+        costStatisticsDto.setDates(null);
+        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
+        costStatisticsDtos = costStatisticsDtos.stream().map(dto -> {
+            Set<String> uniqueTags = new HashSet<>();
+            if (dto.getInspectionItem().contains(",")) {
+                for (String s : dto.getInspectionItem().split(",")) {
+                    uniqueTags.add(s.split("@")[0]);
+                }
+            } else {
+                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
+            }
+            dto.setInspectionItem(uniqueTags.toString());
+            return dto;
+        }).collect(Collectors.toList());
+
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+        String fileName = URLEncoder.encode("鏍峰搧璐圭敤缁熻瀵煎嚭", "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        Map<String, List<CostStatisticsDto>> groupByCompany =
+                costStatisticsDtos.stream().filter(e -> StrUtil.isNotEmpty(e.getCompany()))
+                        .collect(Collectors.groupingBy(CostStatisticsDto::getCompany));
+        try {
+            // 鏂板缓ExcelWriter
+            // 鏂板缓ExcelWriter
+            ExcelWriter excelWriter =
+                    EasyExcel.write(response.getOutputStream())
+                            .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
+                            .build();
+            for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) {
+                String sheetName = companyDataEntry.getKey();
+                List<CostStatisticsDto> dataList = companyDataEntry.getValue();
+                WriteSheet mainSheet = EasyExcel.writerSheet(sheetName)
+                        .head(CostStatisticsDto.class)
+                        .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
+                        .build();
+                excelWriter.write(dataList, mainSheet);
+            }
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
     }
 }
 

--
Gitblit v1.9.3