From 8246ec51e9cf0fdb37a76bc62cac4ac2b3ffc893 Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期五, 14 三月 2025 14:49:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java |  814 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 814 insertions(+), 0 deletions(-)

diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java
new file mode 100644
index 0000000..9047411
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java
@@ -0,0 +1,814 @@
+package com.ruoyi.requier.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+
+import cn.hutool.core.util.ObjectUtil;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.service.impl.ServiceImpl;
+import com.ruoyi.basic.vo.StandardProductVO;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.mapper.*;
+import com.ruoyi.inspect.pojo.*;
+import com.ruoyi.inspect.vo.ProductVo;
+import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
+import com.ruoyi.performance.mapper.PerformanceShiftMapper;
+import com.ruoyi.performance.mapper.ShiftTimeMapper;
+import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
+import com.ruoyi.performance.pojo.PerformanceShift;
+import com.ruoyi.performance.pojo.ShiftTime;
+import com.ruoyi.requier.mapper.PkMasterMapper;
+import com.ruoyi.requier.mapper.PkSlaveMapper;
+import com.ruoyi.requier.pojo.PkMaster;
+import com.ruoyi.requier.pojo.PkSlave;
+import com.ruoyi.requier.service.InsOrderPlanService;
+import com.ruoyi.requier.service.PkMasterService;
+import com.ruoyi.requier.service.impl.InsOrderPlanServiceImpl;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-07-29 01:16:26
+ */
+@Service
+@Slf4j
+public class PkMasterServiceImpl extends ServiceImpl<PkMasterMapper, PkMaster> implements PkMasterService {
+
+    @Resource
+    private PkMasterMapper pkMasterMapper;
+
+    @Resource
+    private PkSlaveMapper pkSlaveMapper;
+
+    @Resource
+    private InsOrderMapper insOrderMapper;
+
+    @Resource
+    private InsSampleMapper insSampleMapper;
+
+    @Resource
+    private InsProductMapper insProductMapper;
+
+    @Resource
+    private InsProductResultMapper insProductResultMapper;
+
+    @Resource
+    private InsProductUserMapper insProductUserMapper;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Resource
+    private InsOrderPlanService insOrderPlanService;
+
+    @Resource
+    private InsOrderPlanServiceImpl insOrderPlanServiceImpl;
+
+    @Resource
+    private ShiftTimeMapper shiftTimeMapper;
+    @Resource
+    private PerformanceShiftMapper performanceShiftMapper;
+
+    @Resource
+    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+
+    //娓╁害寰幆鏁伴噰
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int temDataAcquisition(PkMaster pkMaster) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        //鏌ヨ鏁伴噰鍏宠仈鐨勫瓙琛ㄤ俊鎭�
+        PkMaster master = new PkMaster();
+        List<PkMaster> pkMasters = pkMasterMapper.selectList(Wrappers.<PkMaster>lambdaQuery()
+                .eq(PkMaster::getEntrustCode, pkMaster.getEntrustCode())
+                .eq(PkMaster::getSampleCode, pkMaster.getSampleCode())
+                .eq(PkMaster::getModel, pkMaster.getModel())
+                .eq(PkMaster::getCycles, pkMaster.getCycles())
+                .eq(PkMaster::getTemperature, pkMaster.getTemperature()).orderByDesc(PkMaster::getId));
+        if(!pkMasters.isEmpty()){
+            master = pkMasters.get(0);
+        }
+        //鏌ヨ瀵瑰簲鐨勬楠屽崟琛�
+        InsOrder insOrder = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).eq(InsOrder::getEntrustCode, pkMaster.getEntrustCode()));
+        if (ObjectUtils.isEmpty(insOrder)) {
+            throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode());
+        }
+        //鏌ヨ瀵瑰簲妫�楠屾牱鍝乮d
+        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+                .eq(InsSample::getInsOrderId, insOrder.getId())
+                .eq(InsSample::getSampleCode, pkMaster.getSampleCode())
+                .eq(InsSample::getModel, pkMaster.getModel()));
+        if (ObjectUtils.isEmpty(insSample)) {
+            throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗曚笅鐨勮鏍峰搧" + pkMaster.getSampleCode());
+        }        if (ObjectUtils.isNotEmpty(master)) {
+            //throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode() + "鐨勬暟閲囨暟鎹�");
+            List<PkSlave> pkSlaves = pkSlaveMapper.selectList1(master.getIsid());
+            if (CollectionUtils.isEmpty(pkSlaves)) {
+                throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode() + "鐨勬暟閲囧瓙鏁版嵁");
+            }
+
+            //鏌ヨ瀵瑰簲妫�楠岄」鐩�
+            Map<String, Object> map = insOrderPlanService.temCycle(insSample.getId(), pkMaster.getCycles(), pkMaster.getTemperature());
+            List<ProductVo> productVos = (List<ProductVo>) map.get("productVos");
+            if (CollectionUtils.isNotEmpty(productVos)) {
+                //todo 濡傛灉娓╁害寰幆鐨勯」鐩畁m鏈夋敼鍔ㄨ繖閲岄渶瑕佹敼鍔� @zss
+                for (PkSlave pkSlave : pkSlaves) {
+                    for (ProductVo productVo : productVos) {
+                        if (pkSlave.getInsBushingId().equals(productVo.getBushColor()) &&
+                                pkSlave.getInsFibersId().equals(productVo.getCode()) &&
+                                pkSlave.getInsFiberId().equals(productVo.getColor())) {
+                            //鎵惧埌瀵瑰簲鐨勬暟鎹�(瀵瑰簲濂楃鍏夌氦鐨勬暟鎹�)
+                            List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, productVo.getInsProduct().getId()));
+                            InsProductResult result;
+                            if (CollectionUtils.isEmpty(results)) {
+                                result = new InsProductResult();
+                            } else {
+                                result = results.get(0);
+                            }
+                            result.setInsProductId(productVo.getInsProduct().getId());//妫�楠岄」鐩甶d
+                            List<Map<String, Object>> iv = new ArrayList<>();
+                            List<Map<String, Object>> cv = new ArrayList<>();
+                            if (productVo.getInsProduct().getInspectionItemClass().equals("1310nm")) {
+                                //1310nm澶栫
+                                Map<String, Object> map1 = new HashMap<>();
+                                map1.put("u", userId + "");
+                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) ? pkSlave.getWeaken1310A().toString() : null);
+                                iv.add(map1);
+                                //1310nm鍐呯
+                                Map<String, Object> map2 = new HashMap<>();
+                                map2.put("u", userId + "");
+                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B()) ? pkSlave.getWeaken1310B().toString() : null);
+                                iv.add(map2);
+                                //1310nm琛板噺绯绘暟
+                                Map<String, Object> map3 = new HashMap<>();
+                                double v = 0.0;
+                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B())) {
+                                    v = (pkSlave.getWeaken1310A() + pkSlave.getWeaken1310B()) / 2;
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1310B())) {
+                                    v = pkSlave.getWeaken1310A();
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1310A())) {
+                                    v = pkSlave.getWeaken1310B();
+                                } else {
+                                    log.info("鏁伴噰id锛歿}", pkSlave.getId());
+                                    throw new ErrorException("1310鐨勪袱绔兘娌℃湁鏁版嵁!!!");
+                                }
+                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
+                                map3.put("v", String.valueOf(decimal));
+                                cv.add(map3);
+                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1550nm")) {
+                                //1550nm澶栫
+                                Map<String, Object> map1 = new HashMap<>();
+                                map1.put("u", userId + "");
+                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) ? pkSlave.getWeaken1550A().toString() : null);
+                                iv.add(map1);
+                                //1550nm鍐呯
+                                Map<String, Object> map2 = new HashMap<>();
+                                map2.put("u", userId + "");
+                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B()) ? pkSlave.getWeaken1550B().toString() : null);
+                                iv.add(map2);
+                                //1550nm琛板噺绯绘暟
+                                Map<String, Object> map3 = new HashMap<>();
+                                double v = 0.0;
+                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B())) {
+                                    v = (pkSlave.getWeaken1550A() + pkSlave.getWeaken1550B()) / 2;
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1550B())) {
+                                    v = pkSlave.getWeaken1550A();
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1550A())) {
+                                    v = pkSlave.getWeaken1550B();
+                                } else {
+                                    throw new ErrorException("1550鐨勪袱绔兘娌℃湁鏁版嵁!!!");
+                                }
+                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
+                                map3.put("v", String.valueOf(decimal));
+                                cv.add(map3);
+                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1625nm")) {
+                                //1625nm澶栫
+                                Map<String, Object> map1 = new HashMap<>();
+                                map1.put("u", userId + "");
+                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) ? pkSlave.getWeaken1625A().toString() : null);
+                                iv.add(map1);
+                                //1625nm鍐呯
+                                Map<String, Object> map2 = new HashMap<>();
+                                map2.put("u", userId + "");
+                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B()) ? pkSlave.getWeaken1625B().toString() : null);
+                                iv.add(map2);
+                                //1625nm琛板噺绯绘暟
+                                Map<String, Object> map3 = new HashMap<>();
+                                double v = 0.0;
+                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B())) {
+                                    v = (pkSlave.getWeaken1625A() + pkSlave.getWeaken1625B()) / 2;
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1625B())) {
+                                    v = pkSlave.getWeaken1625A();
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1625A())) {
+                                    v = pkSlave.getWeaken1625B();
+                                } else {
+                                    throw new ErrorException("1625鐨勪袱绔兘娌℃湁鏁版嵁!!!");
+                                }
+                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
+                                map3.put("v", String.valueOf(decimal));
+                                cv.add(map3);
+                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1383nm")) {
+                                //1383nm澶栫
+                                Map<String, Object> map1 = new HashMap<>();
+                                map1.put("u", userId + "");
+                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) ? pkSlave.getWeaken1383A().toString() : null);
+                                iv.add(map1);
+                                //1383nm鍐呯
+                                Map<String, Object> map2 = new HashMap<>();
+                                map2.put("u", userId + "");
+                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B()) ? pkSlave.getWeaken1383B().toString() : null);
+                                iv.add(map2);
+                                //1383nm琛板噺绯绘暟
+                                Map<String, Object> map3 = new HashMap<>();
+                                double v = 0.0;
+                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B())) {
+                                    v = (pkSlave.getWeaken1383A() + pkSlave.getWeaken1310B()) / 2;
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1383B())) {
+                                    v = pkSlave.getWeaken1383A();
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1383A())) {
+                                    v = pkSlave.getWeaken1383B();
+                                } else {
+                                    throw new ErrorException("1383鐨勪袱绔兘娌℃湁鏁版嵁!!!");
+                                }
+                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
+                                map3.put("v", String.valueOf(decimal));
+                                cv.add(map3);
+                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1490nm")) {
+                                //1490nm澶栫
+                                Map<String, Object> map1 = new HashMap<>();
+                                map1.put("u", userId + "");
+                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) ? pkSlave.getWeaken1490A().toString() : null);
+                                iv.add(map1);
+                                //1490nm鍐呯
+                                Map<String, Object> map2 = new HashMap<>();
+                                map2.put("u", userId + "");
+                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B()) ? pkSlave.getWeaken1490B().toString() : null);
+                                iv.add(map2);
+                                //1490nm琛板噺绯绘暟
+                                Map<String, Object> map3 = new HashMap<>();
+                                double v = 0.0;
+                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B())) {
+                                    v = (pkSlave.getWeaken1490A() + pkSlave.getWeaken1310B()) / 2;
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1490B())) {
+                                    v = pkSlave.getWeaken1490A();
+                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1490A())) {
+                                    v = pkSlave.getWeaken1490B();
+                                } else {
+                                    throw new ErrorException("1490鐨勪袱绔兘娌℃湁鏁版嵁!!!");
+                                }
+                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
+                                map3.put("v", String.valueOf(decimal));
+                                cv.add(map3);
+                            } else {
+                                throw new ErrorException("娌℃湁鎵惧埌璇ユ俯搴︾殑妫�楠岄」鐩�" + productVo.getInsProduct().getInspectionItemClass());
+                            }
+                            result.setInsValue(JSON.toJSONString(iv));//妫�楠屽��
+                            result.setComValue(JSON.toJSONString(cv));//璁$畻鍊�
+                            if (BeanUtil.isEmpty(result.getId())) {
+                                result.setCreateUser(userId);
+                                result.setUpdateUser(userId);
+                                insProductResultMapper.insert(result);
+                            } else {
+                                result.setUpdateUser(userId);
+                                result.setUpdateTime(LocalDateTime.now());
+                                insProductResultMapper.updateById(result);
+                            }
+
+                            InsProduct insProduct = productVo.getInsProduct();
+                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
+                            String[] comValue = insProductResult.getComValue().split(":");
+                            String comple = comValue[comValue.length-1].split("\"")[1];
+                            //棣栧厛鏌ョ湅娓╁害鏄惁鏄�20搴﹀父娓�
+                            if (!pkMaster.getTemperature().equals("20鈩�(甯告俯)")) {
+                                //濡傛灉涓嶆槸鍏堟煡璇㈡槸鍚︽湁鍊�
+                                int a = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                                        .eq(InsProduct::getInspectionItem, "1")
+                                        .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")).stream().map(InsProduct::getInsResult).anyMatch(ObjectUtils::isEmpty) ? 1 : 0;
+                                if (a == 1) {
+                                    throw new ErrorException("鍏堣幏鍙�20鈩�(甯告俯)鐨勬楠屽��,鍐嶈幏鍙栧叾浠栨俯搴�" + pkMaster.getSampleCode());
+                                } else {
+                                    //璁$畻琛板噺宸�
+                                    InsProduct insPro = null;
+                                    switch (insProduct.getInspectionItemClass()) {
+                                        case "1310nm":
+                                            //鏌ヨ20鈩�(甯告俯)1310nm鐨勮“鍑忕郴鏁�
+                                            try {
+                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                                                        .eq(InsProduct::getInspectionItem, "1")
+                                                        .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")
+                                                        .eq(InsProduct::getInspectionItemClass, "1310nm")
+                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
+                                            } catch (Exception e) {
+                                                throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1310nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�");
+                                            }
+                                            break;
+                                        case "1550nm":
+                                            //鏌ヨ20鈩�(甯告俯)1550nm鐨勮“鍑忕郴鏁�
+                                            try {
+                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                                                        .eq(InsProduct::getInspectionItem, "1")
+                                                        .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")
+                                                        .eq(InsProduct::getInspectionItemClass, "1550nm")
+                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
+                                            } catch (Exception e) {
+                                                throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1625nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�");
+                                            }
+                                            break;
+                                        case "1625nm":
+                                            //鏌ヨ20鈩�(甯告俯)1625nm鐨勮“鍑忕郴鏁�
+                                            try {
+                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                                                        .eq(InsProduct::getInspectionItem, "1")
+                                                        .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")
+                                                        .eq(InsProduct::getInspectionItemClass, "1625nm")
+                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
+                                            } catch (Exception e) {
+                                                throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1625nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�");
+                                            }
+                                            break;
+                                        case "1383nm":
+                                            //鏌ヨ20鈩�(甯告俯)1383nm鐨勮“鍑忕郴鏁�
+                                            try {
+                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                                                        .eq(InsProduct::getInspectionItem, "1")
+                                                        .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")
+                                                        .eq(InsProduct::getInspectionItemClass, "1383nm")
+                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
+                                            } catch (Exception e) {
+                                                throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1383nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�");
+                                            }
+                                            break;
+                                        case "1490nm":
+                                            //鏌ヨ20鈩�(甯告俯)1490nm鐨勮“鍑忕郴鏁�
+                                            try {
+                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
+                                                        .eq(InsProduct::getInspectionItem, "1")
+                                                        .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")
+                                                        .eq(InsProduct::getInspectionItemClass, "1490nm")
+                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
+                                            } catch (Exception e) {
+                                                throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1490nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�");
+                                            }
+                                            break;
+                                    }
+                                    InsProductResult insProductRes = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId()));
+                                    String[] split = insProductRes.getComValue().split(":");
+                                    double abs = Math.abs(Double.parseDouble(split[split.length-1].split("\"")[1]) - Double.parseDouble(comple));
+                                    BigDecimal scale = BigDecimal.valueOf(abs).setScale(3, RoundingMode.HALF_UP);
+                                    insProduct.setLastValue(String.valueOf(scale));
+                                    String ask = insProduct.getAsk();
+                                    int insResult = 1;
+                                    switch (ask.charAt(0)) {
+                                        case '<':
+                                            insResult = Double.parseDouble(insProduct.getLastValue()) < Double.parseDouble(ask.substring(1)) ? 1 : 0;
+                                            break;
+                                        case '>':
+                                            insResult = Double.parseDouble(insProduct.getLastValue()) > Double.parseDouble(ask.substring(1)) ? 1 : 0;
+                                            break;
+                                        case '=':
+                                            insResult = Double.parseDouble(insProduct.getLastValue()) == Double.parseDouble(ask.substring(1)) ? 1 : 0;
+                                            break;
+                                        case '鈮�':
+                                            insResult = Double.parseDouble(insProduct.getLastValue()) <= Double.parseDouble(ask.substring(1)) ? 1 : 0;
+                                            break;
+                                        case '鈮�':
+                                            insResult = Double.parseDouble(insProduct.getLastValue()) >= Double.parseDouble(ask.substring(1)) ? 1 : 0;
+                                            break;
+                                    }
+                                    insProduct.setInsResult(insResult);
+                                }
+                            } else {
+                                //濡傛灉鏄�20搴﹀父娓�,闇�瑕佺粰鍑哄悎鏍肩殑缁撹
+                                insProduct.setInsResult(1);//20搴﹀父娓╃殑妫�楠岄」榛樿涓哄悎鏍�
+                            }
+                            insProduct.setUpdateUser(userId);
+                            insProductMapper.updateById(insProduct);
+                            User user = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getAccount, master.getDetectionPeople()));
+                            if (ObjectUtils.isEmpty(user)) {
+                                throw new ErrorException("lims绯荤粺娌℃湁鎵惧埌璇ョ敤鎴�" + master.getDetectionPeople());
+                            }
+                            insProductUserMapper.insert(new InsProductUser(null, user.getId(), master.getDetectionDate(), insProduct.getId()));
+                        }
+                    }
+                }
+            }
+            //缁欐俯搴﹀惊鐜殑妫�楠岄」鐩粦瀹氳澶�
+            InsProduct product = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                    .eq(InsProduct::getState, 1)
+                    .eq(InsProduct::getInsSampleId, insSample.getId())
+                    .eq(InsProduct::getInspectionItem, "娓╁害寰幆"));
+            if (ObjectUtils.isEmpty(product)) {
+                throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗曚笅璇ユ牱鍝佺殑鐩稿叧娓╁害寰幆妫�楠岄」鐩�");
+            }
+            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, product.getId()));
+            if (ObjectUtils.isEmpty(insProductResult)) {
+                insProductResult = new InsProductResult();
+                insProductResult.setInsProductId(product.getId());
+            }
+            if (ObjectUtils.isEmpty(insProductResult.getEquipValue())) {
+                List<Map<String, Object>> dv = new ArrayList<>();
+                Map<String, Object> map4 = new HashMap<>();
+                map4.put("v", "JCZX-TX-TT02006");
+                dv.add(map4);
+                Map<String, Object> map5 = new HashMap<>();
+                map5.put("v", "JCZX-TX-TT02001");
+                dv.add(map5);
+                insProductResult.setEquipValue(JSON.toJSONString(dv));
+                List<Map<String, Object>> dn = new ArrayList<>();
+                Map<String, Object> map6 = new HashMap<>();
+                map6.put("v", "姝ュ叆寮忛珮浣庢俯婀跨儹璇曢獙绠�");
+                dn.add(map6);
+                Map<String, Object> map7 = new HashMap<>();
+                map7.put("v", "姝ュ叆寮忛珮浣庢俯璇曢獙绠�");
+                dn.add(map7);
+                insProductResult.setEquipName(JSON.toJSONString(dn));
+                if (BeanUtil.isEmpty(insProductResult.getId())) {
+                    insProductResult.setCreateUser(userId);
+                    insProductResult.setUpdateUser(userId);
+                    insProductResultMapper.insert(insProductResult);
+                } else {
+                    insProductResult.setUpdateUser(userId);
+                    insProductResult.setUpdateTime(LocalDateTime.now());
+                    insProductResultMapper.updateById(insProductResult);
+                }
+            }
+        }
+        //鏌ユ壘鏍峰搧涓嬭娆℃暟鐨勬俯搴︾殑椤圭洰
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getState, 1)
+                .isNotNull(InsProduct::getSpecialItemParentId)
+                .isNotNull(InsProduct::getInspectionItemClass));
+        // 杩囨护鍑哄綋鍓嶅惊鐜鏁� 鍜� 娓╁害鐨勬楠岄」鐩�
+        List<InsProduct> productList = insProducts.stream()
+                .filter(item -> item.getInspectionItem().equals(pkMaster.getCycles()) &&
+                        item.getInspectionItemSubclass().equals(pkMaster.getTemperature()))
+                .collect(Collectors.toList());
+        // 宸ユ椂娣诲姞
+        int count = 0;
+        for(InsProduct insProduct1 : productList) {
+            // 鏌ヨinsProductResult鎷垮埌insValue鐨勬湁鍊肩殑涓暟
+            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
+                    .eq(InsProductResult::getInsProductId, insProduct1.getId()));
+            if(!Objects.isNull(insProductResult)) {
+                // insProductResult涓嶄负绌�,鑾峰彇鏈夊�肩殑涓暟
+                insProductResult.getInsValue();
+                List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
+                for (Map map : maps) {
+                    if (Strings.isNotEmpty(map.get("v").toString())) {
+                        count++;
+                        break;
+                    }
+                }
+            }
+        }
+        // 璇ュ崟瀛愪笅闄や簡褰撳墠娆℃暟浠ュ強娓╁害鏈夊�肩殑璁板綍
+        List<InsProduct> productList1 = insProducts.stream()
+                .filter(item -> !(item.getInspectionItem().equals(pkMaster.getCycles()) && item.getInspectionItemSubclass().equals(pkMaster.getTemperature())))
+                .collect(Collectors.toList());
+        int allValue = 0;
+        for(InsProduct insProduct1 : productList1) {
+            // 鏌ヨinsProductResult鎷垮埌insValue鐨勬湁鍊肩殑涓暟
+            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
+                    .eq(InsProductResult::getInsProductId, insProduct1.getId()));
+            if(!Objects.isNull(insProductResult)) {
+                // insProductResult涓嶄负绌�,鑾峰彇鏈夊�肩殑涓暟
+                insProductResult.getInsValue();
+                List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
+                for (Map map : maps) {
+                    if (Strings.isNotEmpty(map.get("v").toString())) {
+                        allValue++;
+                        break;
+                    }
+                }
+            }
+        }
+        Map<String, Boolean> map = isOvertimeAndCrossDay(userId);
+        Boolean isWithinRange = map.get("isWithinRange"); // 鏄惁姝e父涓婄彮
+        Boolean isCross = map.get("isCross"); // 鏄惁璺ㄥぉ
+        BigDecimal manHour = BigDecimal.ZERO; // 宸ユ椂
+        InsProduct insProduct = insProductMapper.selectOne(new LambdaQueryWrapper<InsProduct>().eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getInspectionItem, "娓╁害寰幆"));
+        StandardProductVO workHourMap = insOrderPlanServiceImpl.getInspectWorkHourAndGroup(insProduct);
+        if(ObjectUtil.isNotNull(workHourMap)){
+            manHour = new BigDecimal(workHourMap.getManHour());
+        }
+        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTime parse = DateUtil.parse(LocalDateTime.now().format(formatter));
+        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
+        auxiliaryOutputWorkingHours.setInspectionItem("娓╁害寰幆"); // 妫�楠岄」鐩�
+        auxiliaryOutputWorkingHours.setInspectionItemSubclass(""); // 妫�楠岄」鐩瓙绫�
+        if(isWithinRange) {
+            // 姝e父涓婄彮
+            auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode()); // 闈炲姞鐝鎵樺崟鍙�
+            auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal(accuracy(manHour,count))); // 宸ユ椂
+            auxiliaryOutputWorkingHours.setAmount(count); // 闈炲姞鐝暟閲�
+        }else{
+            // 鍔犵彮
+            auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode()); // 闈炲姞鐝鎵樺崟鍙�
+            auxiliaryOutputWorkingHours.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,count))); // 宸ユ椂
+            auxiliaryOutputWorkingHours.setOvertimeAmount(count); // 闈炲姞鐝暟閲�
+        }
+        if(isCross) {
+            String date = LocalDateTime.now().minusDays(1).toLocalDate().atStartOfDay().format(formatters);// 鍓嶄竴澶�
+            auxiliaryOutputWorkingHours.setDateTime(date); // 鏃ユ湡
+        }else {
+            String date = LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters);// 褰撳ぉ
+            auxiliaryOutputWorkingHours.setDateTime(date); // 鏃ユ湡
+        }
+        auxiliaryOutputWorkingHours.setOutputWorkTime(new BigDecimal(accuracy(manHour,count))); // 浜у嚭宸ユ椂
+        auxiliaryOutputWorkingHours.setWeekDay(insOrderPlanServiceImpl.getWeek(LocalDateTime.now().format(formatters)));//鏄熸湡
+        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
+        auxiliaryOutputWorkingHours.setCheck(userId);//妫�娴嬩汉
+        auxiliaryOutputWorkingHours.setSample(insSample.getSampleCode());//鏍峰搧缂栧彿
+        auxiliaryOutputWorkingHours.setManHourGroup(workHourMap.getManHourGroup());//宸ユ椂鍒嗙粍
+        // 鏌ヨ闇�瑕佹搷浣滅殑鏃ユ湡鏄惁鏈夎褰�
+        List<AuxiliaryOutputWorkingHours> oldRecords = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+                .eq(AuxiliaryOutputWorkingHours::getCheck,userId)
+                .eq(AuxiliaryOutputWorkingHours::getInspectionItem, "娓╁害寰幆")
+                .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, "")
+                .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
+                .and(i->i.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())
+                        .or()
+                        .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode()))
+                .eq(AuxiliaryOutputWorkingHours::getDateTime, auxiliaryOutputWorkingHours.getDateTime())
+        );
+        // 鎵�鏈夌殑璁板綍锛堝叾浠栧ぉ + 褰撳墠澶╋級
+        List<AuxiliaryOutputWorkingHours> addOldRecords = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+                .eq(AuxiliaryOutputWorkingHours::getCheck,userId)
+                .eq(AuxiliaryOutputWorkingHours::getInspectionItem, "娓╁害寰幆")
+                .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, "")
+                .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
+                .and(i->i.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())
+                        .or()
+                        .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode()))
+        );
+        if(CollectionUtils.isEmpty(oldRecords)){
+            // 鏂板涔熻鏌ョ湅鏄惁鏈夋墍鏈夌殑璁板綍
+            if(Objects.isNull(addOldRecords)) {
+                // 鍏朵粬澶╀篃娌℃湁璁板綍
+                auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+            }else{
+                // 鎵�鏈夌殑璁板綍
+                int otherDayAmount = 0; // 鎵�鏈夌殑鏁伴噺
+                for(AuxiliaryOutputWorkingHours a : addOldRecords) {
+                    otherDayAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
+                }
+                if(isWithinRange) {
+                    // 姝e父涓婄彮
+
+                    auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // 宸ユ椂
+                    auxiliaryOutputWorkingHours.setAmount((count - otherDayAmount + allValue)); // 闈炲姞鐝暟閲�
+                }else {
+                    // 鍔犵彮
+                    auxiliaryOutputWorkingHours.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // 宸ユ椂
+                    auxiliaryOutputWorkingHours.setOvertimeAmount((count - otherDayAmount + allValue)); // 闈炲姞鐝暟閲�
+                }
+                auxiliaryOutputWorkingHours.setOutputWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // 浜у嚭宸ユ椂
+                auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+            }
+        }else {
+            // 涓嶄负绌�
+            Integer oldAmount = 0; // 宸ユ椂娣诲姞鐨勪釜鏁�
+            for(AuxiliaryOutputWorkingHours a : addOldRecords) {
+                oldAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
+            }
+            if(count > (oldAmount - allValue)){
+                // 鏌ユ壘鍑烘棩鏈熶负寰楀埌鏃ユ湡鐨勮褰�
+                List<AuxiliaryOutputWorkingHours> collect = oldRecords.stream().filter(item -> item.getDateTime().equals(auxiliaryOutputWorkingHours.getDateTime())).collect(Collectors.toList());
+                if(CollectionUtils.isNotEmpty(collect)){
+                    // 鏈夌殑璇濆氨鏄洿鏂版搷浣�
+                    AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours1 = collect.get(0);
+                    if(isWithinRange) {
+                        // 姝e父涓婄彮
+                        // 鎷垮埌鍘熸湰鐨勬暟閲� 涓� 鏂扮殑鏁伴噺鐩稿姞
+                        int num =  Objects.isNull(auxiliaryOutputWorkingHours1.getAmount()) ? 0 :auxiliaryOutputWorkingHours1.getAmount(); // 鍘熸湰鐨勬暟閲�
+                        auxiliaryOutputWorkingHours1.setAmount(count - oldAmount + num + allValue); // 闈炲姞鐝暟閲�
+                        auxiliaryOutputWorkingHours1.setOrderNo(insOrder.getEntrustCode()); // 闈炲姞鐝鎵樺崟鍙�
+                        auxiliaryOutputWorkingHours1.setWorkTime(new BigDecimal(accuracy(manHour,(count - oldAmount + num + allValue)))); // 宸ユ椂
+                        BigDecimal outputWorkTime = new BigDecimal(accuracy(manHour, auxiliaryOutputWorkingHours1.getAmount())).add((Objects.isNull(auxiliaryOutputWorkingHours1.getOvertimeWorkTime()) ? new BigDecimal(0) : auxiliaryOutputWorkingHours1.getOvertimeWorkTime()));
+                        auxiliaryOutputWorkingHours1.setOutputWorkTime(outputWorkTime);// 浜у嚭宸ユ椂 閲囬泦鑲畾鏄細閲囬泦瀹�
+                    }else{
+                        // 鍔犵彮
+                        // 鎷垮埌鍘熸湰鐨勬暟閲� 涓� 鏂扮殑鏁伴噺鐩稿姞
+                        int num =  Objects.isNull(auxiliaryOutputWorkingHours1.getOvertimeAmount()) ? 0 :auxiliaryOutputWorkingHours1.getOvertimeAmount(); // 鍘熸湰鐨勬暟閲�
+                        auxiliaryOutputWorkingHours1.setOvertimeAmount(count - oldAmount + num + allValue);// 鍔犵彮鏁伴噺
+                        auxiliaryOutputWorkingHours1.setOvertimeOrderNo(insOrder.getEntrustCode()); // 鍔犵彮濮旀墭鍗曞彿
+                        auxiliaryOutputWorkingHours1.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,(count - oldAmount + num + allValue)))); // 宸ユ椂
+                        BigDecimal outputWorkTime = new BigDecimal(accuracy(manHour, auxiliaryOutputWorkingHours1.getOvertimeAmount())).add(
+                                (Objects.isNull(auxiliaryOutputWorkingHours1.getWorkTime()) ? new BigDecimal(0) : auxiliaryOutputWorkingHours1.getWorkTime()));
+                        auxiliaryOutputWorkingHours1.setOutputWorkTime(outputWorkTime); // 浜у嚭宸ユ椂 閲囬泦鑲畾鏄細閲囬泦瀹�
+                    }
+                    auxiliaryOutputWorkingHoursMapper.updateById(auxiliaryOutputWorkingHours1);
+                }
+            }
+        }
+
+
+
+        return 0;
+    }
+
+    //娓╁害寰幆鏁伴噰鎬讳綋
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int temDataAcquisition2(PkMaster pkMaster) {
+        //鏌ヨ鍑烘墍鏈夊惊鐜鏁板拰娓╁害,鐒跺悗寰幆璋冪敤temDataAcquisition鎺ュ彛
+        //鏌ヨ瀵瑰簲鐨勬楠屽崟琛�
+        InsOrder insOrder = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).eq(InsOrder::getEntrustCode, pkMaster.getEntrustCode()));
+        if (ObjectUtils.isEmpty(insOrder)) {
+            throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode());
+        }
+        //鏌ヨ瀵瑰簲妫�楠屾牱鍝乮d
+        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+                .eq(InsSample::getInsOrderId, insOrder.getId())
+                .eq(InsSample::getSampleCode, pkMaster.getSampleCode())
+                .eq(InsSample::getModel, pkMaster.getModel()));
+        if (ObjectUtils.isEmpty(insSample)) {
+            throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗曚笅鐨勮鏍峰搧" + pkMaster.getSampleCode());
+        }
+        //鏌ユ壘鏍峰搧涓嬫墍鏈夋俯搴﹀惊鐜殑椤圭洰
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getInsSampleId, insSample.getId())
+                .eq(InsProduct::getState, 1)
+                .isNotNull(InsProduct::getSpecialItemParentId)
+                .isNotNull(InsProduct::getInspectionItemClass));
+        //杩囨护鍑烘墍鏈夊惊鐜鏁板拰娓╁害
+        List<String> collect1 = insProducts.stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.toList());
+        List<String> collect2 = insProducts.stream().map(InsProduct::getInspectionItemSubclass).distinct().collect(Collectors.toList());
+        for (String s : collect1) {
+            for (String s1 : collect2) {
+                PkMaster master = new PkMaster();
+                master.setEntrustCode(pkMaster.getEntrustCode());
+                master.setSampleCode(pkMaster.getSampleCode());
+                master.setModel(pkMaster.getModel());
+                master.setCycles(s);
+                master.setTemperature(s1);
+                temDataAcquisition(master);
+            }
+        }
+        return 0;
+    }
+
+    /**
+     * 鏄惁鍔犵彮銆佽法澶�
+     */
+    public Map<String,Boolean> isOvertimeAndCrossDay(Integer userId){
+        Map<String, Boolean> map = new HashMap<>();
+        Boolean isWithinRange = true;
+        Boolean isCross = false; // 鏄惁灏嗗綋鍓嶆楠屽崟瀛愮殑宸ユ椂璁$畻鍒扮彮娆″紑濮嬪ぉ
+        LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
+        PerformanceShift performanceShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
+                .eq(PerformanceShift::getUserId, userId)
+                .eq(PerformanceShift::getWorkTime, today));
+        if (ObjectUtils.isNotEmpty(performanceShift)) {
+            ShiftTime shiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, performanceShift.getShift()));
+            if (ObjectUtils.isNotEmpty(shiftTime)) {
+                DateTimeFormatter forma = DateTimeFormatter.ofPattern("HH:mm");
+                LocalTime now = LocalTime.now();
+                LocalTime startTime = LocalTime.parse(shiftTime.getStartTime(), forma);
+                LocalTime endTime = LocalTime.parse(shiftTime.getEndTime(), forma);
+                // 妫�鏌ュ綋鍓嶆椂闂存槸鍚﹀湪鑼冨洿鍐咃紙鍖呮嫭杈圭晫锛�
+
+                // 濡傛灉褰撳墠鏃堕棿涓嶅湪浠婂ぉ鐨勭彮娆″唴  17:00~5.00  15.00 棣栧厛鍒ゆ柇鏄惁璺ㄥぉ浜�
+                // 璺ㄥぉ鐨勬儏鍐�
+                if (startTime.isAfter(endTime)) {
+                    // 鏌ョ湅褰撳墠鏃堕棿鏄惁鍦ㄧ彮娆℃椂闂村唴
+                    if (now.isAfter(startTime)) {
+                        // 濡傛灉鏄湪缁撴潫鏃堕棿涔嬪悗閭d箞灏辨槸姝e父涓婄彮
+                        isWithinRange = true;
+                        isCross = false;
+                    } else {
+                        // 褰撳墠鏃堕棿涓嶅湪鐝鍐咃紝鏌ョ湅鏄ㄥぉ鐨勭彮娆�
+                        LocalDateTime yesterday = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MIDNIGHT);
+                        PerformanceShift yesterdayShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
+                                .eq(PerformanceShift::getUserId, userId)
+                                .eq(PerformanceShift::getWorkTime, yesterday));
+                        ShiftTime yesterdayShiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, yesterdayShift.getShift()));
+                        // 濡傛灉鏄ㄥぉ鐨勭彮娆′笉涓虹┖锛岄偅涔堝氨瑕佺湅鏄ㄥぉ鐨勭彮娆℃椂闂�
+                        if (!Objects.isNull(yesterdayShiftTime)) {
+                            LocalTime yesterdayStartTime = LocalTime.parse(yesterdayShiftTime.getStartTime(), forma);
+                            LocalTime yesterdayEndTime = LocalTime.parse(yesterdayShiftTime.getEndTime(), forma);
+                            // 鏄ㄥぉ鐨勭彮娆℃槸鍚﹁法澶�
+                            if (yesterdayStartTime.isAfter(yesterdayEndTime)) {
+                                // 濡傛灉鏄ㄥぉ鐨勭彮娆¤法澶╀簡锛岄偅涔堝氨瑕佺湅浠婂ぉ鏄惁鍦ㄦ槰澶╃殑鐝鍐咃紝骞朵笖鍙兘鏄湪缁撴潫鏃堕棿涔嬪墠锛屽凡缁忓疄鐜颁簡璺ㄥぉ
+                                if (now.isBefore(yesterdayEndTime)) {
+                                    // 鍦ㄦ槰澶╃彮娆℃椂闂村唴姝e父涓婄彮锛屽伐鏃惰绠楀埌鏄ㄥぉ
+                                    isWithinRange = true;
+                                    isCross = true;
+                                } else {
+                                    // 涓嶅湪鏄ㄥぉ鐝鏃堕棿鍐呭氨鏄姞鐝紝宸ユ椂璁$畻鍒版槰澶�
+                                    isWithinRange = false;
+                                    isCross = true;
+                                }
+                            } else {
+                                // 鏄ㄥぉ鐨勭彮娆℃病鏈夎法澶� 濡傛灉褰撳墠鏃堕棿鍦ㄤ粖澶╃彮娆″紑濮嬫椂闂翠箣鍓嶅氨鏄槰澶╃殑鍔犵彮锛屽惁鍒欏氨鏄粖澶╃殑鍔犵彮
+                                if (now.isBefore(startTime)) {
+                                    isWithinRange = false;
+                                    isCross = true;
+                                } else {
+                                    isWithinRange = false;
+                                    isCross = false;
+                                }
+                            }
+                        } else {
+                            isWithinRange = false;
+                            // 濡傛灉鏄湪寮�濮嬫椂闂翠箣鍓嶉偅涔堝氨瑕佺畻鍒版槰澶�
+                            if (now.isBefore(startTime)) {
+                                isCross = true;
+                            } else {
+                                isCross = false;
+                            }
+                        }
+                    }
+                } else {
+                    // 褰撳墠鐝涓嶈法澶╃殑鎯呭喌涓�
+                    // 濡傛灉褰撳墠鏃堕棿鍦ㄥ紑濮嬫椂闂翠箣鍓嶏紝鏌ユ槰澶╃殑鐝鐪嬪綋鍓嶆椂闂存槸鍚﹀湪鏄ㄥぉ鐨勭彮娆″唴
+                    if (now.isBefore(startTime)) {
+                        // 鏌ョ湅鏄ㄥぉ鏄惁璺ㄥぉ
+                        LocalDateTime yesterday = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MIDNIGHT);
+                        PerformanceShift yesterdayShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
+                                .eq(PerformanceShift::getUserId, userId)
+                                .eq(PerformanceShift::getWorkTime, yesterday));
+                        ShiftTime yesterdayShiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, yesterdayShift.getShift()));
+                        LocalTime yesterdayStartTime = LocalTime.parse(yesterdayShiftTime.getStartTime(), forma);
+                        LocalTime yesterdayEndTime = LocalTime.parse(yesterdayShiftTime.getEndTime(), forma);
+                        if (yesterdayStartTime.isAfter(yesterdayEndTime)) {
+                            // 濡傛灉鏄ㄥぉ璺ㄥぉ
+                            if (now.isBefore(yesterdayEndTime)) {
+                                // 鍦ㄦ槰澶╃殑鐝鏃堕棿鍐呮甯镐笂鐝紝宸ユ椂璁$畻鍒版槰澶�
+                                isWithinRange = true;
+                                isCross = true;
+                            } else {
+                                // 涓嶅湪鏄ㄥぉ鐝鏃堕棿鍐呭氨鏄姞鐝紝宸ユ椂璁$畻鍒版槰澶�
+                                isWithinRange = false;
+                                isCross = true;
+                            }
+                        } else {
+                            // 鏄ㄥぉ涓嶈法澶�
+                            isWithinRange = false;
+                            isCross = true;
+                        }
+                    } else if (now.isAfter(endTime)) {
+                        // 濡傛灉褰撳墠鏃堕棿鍦ㄧ粨鏉熸椂闂翠箣鍚庯紝閭d箞灏辨槸浠婂ぉ鐨勫姞鐝�
+                        isWithinRange = false;
+                        isCross = false;
+                    } else {
+                        // 姝e父涓婄彮
+                        isWithinRange = true;
+                        isCross = false;
+                    }
+                }
+            }
+        }
+        map.put("isWithinRange",isWithinRange);
+        map.put("isCross",isCross);
+        return map;
+    }
+
+    /**
+     * 绮惧害闂
+     */
+    public double accuracy(BigDecimal manHour, int count){
+        return  manHour.multiply(BigDecimal.valueOf(count)).setScale(4, RoundingMode.HALF_UP).doubleValue();
+    }
+
+}
+
+

--
Gitblit v1.9.3