lxp
2025-03-15 5a697e6fafbe3855336ca5fd7e1785de12840d16
Merge remote-tracking branch 'origin/dev' into dev
已修改6个文件
已重命名18个文件
已删除1个文件
已添加7个文件
2027 ■■■■■ 文件已修改
cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/amqp/WorkTimeInsertConsumer.java 1280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/amqp/constants/ExchangeConstants.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/amqp/constants/QueueConstants.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/amqp/constants/RouterKeyConstants.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/QueryResultDTO.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/BasicReportHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/FiberConfigReportHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/FiberOpticConnectorLossReportHandler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/FiberOpticRibbonReportHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/PiperConfigReportHandler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/TemperatureCyclingReportHandler1.java 139 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/TemperatureTestReportHandler.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/handler/ThermalCycleReportHandler.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFileService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderPlanService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFileServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
notice-server/pom.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
notice-server/src/main/java/com/ruoyi/notice/dto/InformationNotificationDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
notice-server/src/main/java/com/ruoyi/notice/mapper/InformationNotificationMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
notice-server/src/main/java/com/ruoyi/notice/pojo/InformationNotification.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
notice-server/src/main/java/com/ruoyi/notice/service/InformationNotificationService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
notice-server/src/main/java/com/ruoyi/notice/service/impl/InformationNotificationServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
notice-server/src/main/resources/mapper/InformationNotificationMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/UserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java
@@ -6,12 +6,10 @@
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;
@@ -19,6 +17,8 @@
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.service.InsOrderPlanService;
import com.ruoyi.inspect.service.impl.InsOrderPlanServiceImpl;
import com.ruoyi.inspect.vo.ProductVo;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.mapper.PerformanceShiftMapper;
@@ -30,9 +30,7 @@
import com.ruoyi.require.mapper.PkSlaveMapper;
import com.ruoyi.require.pojo.PkMaster;
import com.ruoyi.require.pojo.PkSlave;
import com.ruoyi.require.service.InsOrderPlanService;
import com.ruoyi.require.service.PkMasterService;
import com.ruoyi.require.service.impl.InsOrderPlanServiceImpl;
import com.ruoyi.system.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
@@ -99,13 +97,11 @@
    @Resource
    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    //温度循环数采
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int temDataAcquisition(PkMaster pkMaster) {
        Integer userId = Integer.parseInt(SecurityUtils.getUserId().toString());
        Integer userId = SecurityUtils.getUserId().intValue();
        //查询数采关联的子表信息
        PkMaster master = new PkMaster();
        List<PkMaster> pkMasters = pkMasterMapper.selectList(Wrappers.<PkMaster>lambdaQuery()
inspect-server/pom.xml
@@ -16,6 +16,10 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>notice-server</artifactId>
        </dependency>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
inspect-server/src/main/java/com/ruoyi/inspect/amqp/WorkTimeInsertConsumer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1280 @@
package com.ruoyi.inspect.amqp;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
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.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.rabbitmq.client.Channel;
import com.ruoyi.basic.mapper.StandardProductListMapper;
import com.ruoyi.basic.vo.StandardProductVO;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.inspect.amqp.constants.ExchangeConstants;
import com.ruoyi.inspect.amqp.constants.QueueConstants;
import com.ruoyi.inspect.amqp.constants.RouterKeyConstants;
import com.ruoyi.inspect.dto.WorkTimeDTO;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsProductResultMapper;
import com.ruoyi.inspect.mapper.InsSampleUserMapper;
import com.ruoyi.inspect.pojo.*;
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
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;
@Slf4j
@Component
public class WorkTimeInsertConsumer {
    @Resource
    private StandardProductListMapper standardProductListMapper;
    @Resource
    private InsSampleUserMapper insSampleUserMapper;
    @Resource
    private InsProductMapper insProductMapper;
    @Resource
    private ShiftTimeMapper shiftTimeMapper;
    @Resource
    private PerformanceShiftMapper performanceShiftMapper;
    @Resource
    private InsProductResultMapper insProductResultMapper;
    @Resource
    AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    /**
     * å·¥æ—¶è®¡ç®—消费者-光纤试验室
     * @param jsonStr
     * @param channel
     * @param message
     */
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    @RabbitListener(bindings = @QueueBinding(key = {RouterKeyConstants.GX_KEY},value = @Queue(QueueConstants.GX_QUEUE),exchange = @Exchange(name = ExchangeConstants.WORK_TIME_EXCHANGE)))
    public void addWorkTimeListenerByGX(String jsonStr, Channel channel, Message message){
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        WorkTimeDTO workTimeDTO = new WorkTimeDTO();
        try {
            workTimeDTO = JackSonUtil.unmarshal(jsonStr,WorkTimeDTO.class);
            addWorkTimeRecord(
                    workTimeDTO.getUserId(),
                    workTimeDTO.getInsOrder(),
                    workTimeDTO.getInsSample(),
                    workTimeDTO.getInsProduct(),
                    workTimeDTO.getParentInsProduct(),
                    workTimeDTO.getCurrentSampleId(),
                    workTimeDTO.getInsProductId(),
                    workTimeDTO.getOldResults(),
                    workTimeDTO.getNewResult()
            );
            //执行成功,手动确认
            channel.basicAck(deliveryTag,false);
            log.info("光纤试验室工时计算队列:执行成功:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId());
        } catch (Exception e) {
            log.error("光纤试验室工时计算队列:执行失败:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId(),e);
            try {
                channel.basicNack(deliveryTag,false,false);
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
            throw new RuntimeException(e);
        }
    }
    /**
     * å·¥æ—¶è®¡ç®—消费者-材料试验室
     * @param jsonStr
     * @param channel
     * @param message
     */
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    @RabbitListener(bindings = @QueueBinding(key = {RouterKeyConstants.CL_KEY},value = @Queue(QueueConstants.CL_QUEUE),exchange = @Exchange(name = ExchangeConstants.WORK_TIME_EXCHANGE)))
    public void addWorkTimeListenerByCL(String jsonStr, Channel channel, Message message){
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        WorkTimeDTO workTimeDTO = new WorkTimeDTO();
        try {
            workTimeDTO = JackSonUtil.unmarshal(jsonStr,WorkTimeDTO.class);
            addWorkTimeRecord(
                    workTimeDTO.getUserId(),
                    workTimeDTO.getInsOrder(),
                    workTimeDTO.getInsSample(),
                    workTimeDTO.getInsProduct(),
                    workTimeDTO.getParentInsProduct(),
                    workTimeDTO.getCurrentSampleId(),
                    workTimeDTO.getInsProductId(),
                    workTimeDTO.getOldResults(),
                    workTimeDTO.getNewResult()
            );
            //执行成功,手动确认
            channel.basicAck(deliveryTag,false);
            log.info("材料试验室工时计算队列:执行成功:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId());
        } catch (Exception e) {
            log.error("材料试验室工时计算队列:执行失败:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId(),e);
            try {
                channel.basicNack(deliveryTag,false,false);
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
            throw new RuntimeException(e);
        }
    }
    /**
     * å·¥æ—¶è®¡ç®—消费者-机械性能试验室
     * @param jsonStr
     * @param channel
     * @param message
     */
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    @RabbitListener(bindings = @QueueBinding(key = {RouterKeyConstants.JX_KEY},value = @Queue(QueueConstants.JX_QUEUE),exchange = @Exchange(name = ExchangeConstants.WORK_TIME_EXCHANGE)))
    public void addWorkTimeListenerByJX(String jsonStr, Channel channel, Message message){
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        WorkTimeDTO workTimeDTO = new WorkTimeDTO();
        try {
            workTimeDTO = JackSonUtil.unmarshal(jsonStr,WorkTimeDTO.class);
            addWorkTimeRecord(
                    workTimeDTO.getUserId(),
                    workTimeDTO.getInsOrder(),
                    workTimeDTO.getInsSample(),
                    workTimeDTO.getInsProduct(),
                    workTimeDTO.getParentInsProduct(),
                    workTimeDTO.getCurrentSampleId(),
                    workTimeDTO.getInsProductId(),
                    workTimeDTO.getOldResults(),
                    workTimeDTO.getNewResult()
            );
            //执行成功,手动确认
            channel.basicAck(deliveryTag,false);
            log.info("机械性能试验室工时计算队列:执行成功:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId());
        } catch (Exception e) {
            log.error("机械性能试验室工时计算队列:执行失败:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId(),e);
            try {
                channel.basicNack(deliveryTag,false,false);
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
            throw new RuntimeException(e);
        }
    }
    /**
     * å·¥æ—¶è®¡ç®—消费者-电力试验室
     * @param jsonStr
     * @param channel
     * @param message
     */
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    @RabbitListener(bindings = @QueueBinding(key = {RouterKeyConstants.DL_KEY},value = @Queue(QueueConstants.DL_QUEUE),exchange = @Exchange(name = ExchangeConstants.WORK_TIME_EXCHANGE)))
    public void addWorkTimeListenerByDL(String jsonStr, Channel channel, Message message){
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        WorkTimeDTO workTimeDTO = new WorkTimeDTO();
        try {
            workTimeDTO = JackSonUtil.unmarshal(jsonStr,WorkTimeDTO.class);
            addWorkTimeRecord(
                    workTimeDTO.getUserId(),
                    workTimeDTO.getInsOrder(),
                    workTimeDTO.getInsSample(),
                    workTimeDTO.getInsProduct(),
                    workTimeDTO.getParentInsProduct(),
                    workTimeDTO.getCurrentSampleId(),
                    workTimeDTO.getInsProductId(),
                    workTimeDTO.getOldResults(),
                    workTimeDTO.getNewResult()
            );
            //执行成功,手动确认
            channel.basicAck(deliveryTag,false);
            log.info("电力试验室工时计算队列:执行成功:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId());
        } catch (Exception e) {
            log.error("电力试验室工时计算队列:执行失败:用户id:{},检验项id:{}",workTimeDTO.getUserId(),workTimeDTO.getInsProductId(),e);
            try {
                channel.basicNack(deliveryTag,false,false);
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
            throw new RuntimeException(e);
        }
    }
    /**
     * æ·»åŠ å·¥æ—¶è®°å½•
     * @param userId å½“前登录人id
     * @param insOrder è®¢å•主体
     * @param insSample æ ·å“ä¿¡æ¯
     * @param insProduct æ£€éªŒé¡¹ä¿¡æ¯
     * @param parentInsProduct çˆ¶æ£€éªŒé¡¹ä¿¡æ¯
     * @param currentSampleId å½“前样品id
     * @param k å¾ªçޝkey,当前检验项id
     * @param oldResults æ—§çš„æ£€éªŒç»“果列表
     * @param newResult æ–°çš„æ£€éªŒç»“æžœ
     */
    public synchronized void addWorkTimeRecord(Integer userId,
                                               InsOrder insOrder,
                                               InsSample insSample,
                                               InsProduct insProduct,
                                               InsProduct parentInsProduct,
                                               Integer currentSampleId,
                                               String k,
                                               List<InsProductResult> oldResults,
                                               InsProductResult newResult){
        //校验如果这个人这个检测项目已经添加过了则不需要再新增
        //首先判断当前人的当前时间是否是排班时间内,如果不是就是加班
        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()));
            // åŠå¤©çš„æƒ…况 7:30 23:30
            if(performanceShift.getShift().equals("5")) {
                shiftTime = new ShiftTime();
                shiftTime.setStartTime("07:30");
                shiftTime.setEndTime("23:30");
            }
            // æ£€æŸ¥å½“前时间是否在范围内(包括边界)
            boolean isWithinRange;
            boolean isCross; // æ˜¯å¦å°†å½“前检验单子的工时计算到班次开始天
            DateTimeFormatter forma = DateTimeFormatter.ofPattern("HH:mm");
            LocalTime now = LocalTime.now();
            //shiftTime为空,表示未配置时间
            if(Objects.isNull(shiftTime)){
                isCross = true;
                isWithinRange=false;
            }else{
                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)) {
                        // å¦‚果是在结束时间之后那么就是正常上班
                        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)) {
                                    // åœ¨æ˜¨å¤©ç­æ¬¡æ—¶é—´å†…正常上班,工时计算到昨天
                                    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)) {
                        // å¦‚果当前时间在结束时间之后,那么就是今天的加班
                        isWithinRange = false;
                        isCross = false;
                    } else {
                        // æ­£å¸¸ä¸Šç­
                        isWithinRange = true;
                        isCross = false;
                    }
                }
            }
            //检验父项名称
            String inspectItem = ObjectUtil.isNotNull(parentInsProduct) ? parentInsProduct.getInspectionItem() : insProduct.getInspectionItem();
            //检验子项名称
            String inspectSubItem = ObjectUtil.isNotNull(parentInsProduct) ? parentInsProduct.getInspectionItemSubclass() : insProduct.getInspectionItemSubclass();
            //加班
            List<AuxiliaryOutputWorkingHours> count1s = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                    .eq(AuxiliaryOutputWorkingHours::getCheckId, userId)
                    .eq(AuxiliaryOutputWorkingHours::getInspectionItem, inspectItem)
                    .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, inspectSubItem)
                    .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode())
                    .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode()));
            if (count1s.size() > 1) {
                for (int i = 1; i < count1s.size(); i++) {
                    // ç‰¹æ®Šé¡¹ç›®ä¸èƒ½åˆ é™¤
                    List<String> arrList = Arrays.asList("温度循环", "热循环", "温升试验", "单根垂直燃烧", "消振评估");
                    if (arrList.contains(count1s.get(i).getInspectionItem()) ||
                            count1s.get(i).getInspectionItem().contains("松套管") ||
                            count1s.get(i).getInspectionItemSubclass().contains("松套管") ||
                            !Objects.isNull(insProduct.getInsFiberId()) ||
                            !Objects.isNull(insProduct.getInsFibersId())) {
                        continue;
                    }
                    // å¦‚果是光纤配置下的光纤接头损耗,那么就删除
                    if((!Objects.isNull(insProduct.getInsFiberId()) ||
                            !Objects.isNull(insProduct.getInsFibersId())) && insProduct.getInspectionItem().equals("光纤接头损耗") ) {
                        auxiliaryOutputWorkingHoursMapper.deleteById(count1s.get(i));
                    }
                    auxiliaryOutputWorkingHoursMapper.deleteById(count1s.get(i));
                }
            }
            //非加班
            List<AuxiliaryOutputWorkingHours> count2s = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                    .eq(AuxiliaryOutputWorkingHours::getCheckId, userId)
                    .eq(AuxiliaryOutputWorkingHours::getInspectionItem, inspectItem)
                    .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, inspectSubItem)
                    .eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())
                    .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode()));
            if (count2s.size() > 1) {
                for (int i = 1; i < count2s.size(); i++) {
                    // ç‰¹æ®Šé¡¹ç›®ä¸èƒ½åˆ é™¤
                    List<String> arrList = Arrays.asList("温度循环", "热循环", "温升试验", "单根垂直燃烧", "消振评估");
                    if (arrList.contains(count2s.get(i).getInspectionItem()) ||
                            count2s.get(i).getInspectionItem().contains("松套管") ||
                            count2s.get(i).getInspectionItemSubclass().contains("松套管") ||
                            !Objects.isNull(insProduct.getInsFiberId()) ||
                            !Objects.isNull(insProduct.getInsFibersId())) {
                        continue;
                    }
                    // å¦‚果是光纤配置下的光纤接头损耗,那么就删除
                    if((!Objects.isNull(insProduct.getInsFiberId()) ||
                            !Objects.isNull(insProduct.getInsFibersId())) && insProduct.getInspectionItem().equals("光纤接头损耗")) {
                        auxiliaryOutputWorkingHoursMapper.deleteById(count2s.get(i));
                    }
                    auxiliaryOutputWorkingHoursMapper.deleteById(count2s.get(i));
                }
            }
            //产量工时计算
            AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
            //工时
            BigDecimal manHour = BigDecimal.ZERO;
//                        Double manHour = 0.0;
            StandardProductVO workHourMap = getInspectWorkHourAndGroup(Objects.isNull(parentInsProduct) ? insProduct : parentInsProduct);
            if (ObjectUtil.isNotNull(workHourMap)) {
                manHour = new BigDecimal(workHourMap.getManHour());
            }
            if (isWithinRange) {
                //在时间内就是正常上班
                auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//非加班委托单号
                auxiliaryOutputWorkingHours.setWorkTime(manHour.doubleValue());//非加班工时
                auxiliaryOutputWorkingHours.setAmount(1);//非加班数量
            } else {
                //加班
                auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode());//加班委托单号
                auxiliaryOutputWorkingHours.setOvertimeWorkTime(manHour.doubleValue());//加班工时
                auxiliaryOutputWorkingHours.setOvertimeAmount(1);//加班数量
            }
            //新增工时
            if (CollectionUtils.isEmpty(count2s) && CollectionUtils.isEmpty(count1s)) {
                //日期格式
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                //当前时间
                LocalDateTime localDateTime = LocalDateTime.now();
                DateTime parse = DateUtil.parse(localDateTime.format(formatter));
                //提出公共字段
                auxiliaryOutputWorkingHours.setInspectionItem(inspectItem);//检测父项
                auxiliaryOutputWorkingHours.setInspectionItemSubclass(inspectSubItem);//检测子项
                auxiliaryOutputWorkingHours.setSample(insSample.getSampleCode());//样品编号
                auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : 0) + (ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : 0));//产量工时
                auxiliaryOutputWorkingHours.setManHourGroup(workHourMap.getManHourGroup());//工时分组
                if (isCross) {
                    List<Integer> list = Arrays.asList(3, 4, 6); // ä¼‘息 è¯·å‡  å‡ºå·®
                    List<PerformanceShift> performanceShifts = performanceShiftMapper.selectList(new LambdaQueryWrapper<PerformanceShift>()
                            .eq(PerformanceShift::getUserId, userId)
                            .lt(PerformanceShift::getWorkTime, localDateTime.toLocalDate().atStartOfDay().format(formatters))
                            .notIn(PerformanceShift::getShift, list)
                            .orderByDesc(PerformanceShift::getWorkTime));
                    auxiliaryOutputWorkingHours.setDateTime(performanceShifts.get(0).getWorkTime().format(formatters));//日期 å‰ä¸€å¤©
                } else {
                    auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//日期 å½“前天
                }
                auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//星期
                auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
                auxiliaryOutputWorkingHours.setCheckId(userId);//检测人
                try {
                    if (CollectionUtils.isEmpty(oldResults) && !newResult.getInsValue().equals("[]") ||
                            (CollectionUtils.isNotEmpty(oldResults) && !oldResults.get(0).getInsValue().equals(newResult.getInsValue())/* && !oldResults.get(0).getInsValue().equals("[]")*/) ||
                            (newResult.getInsValue().equals("[]") && !newResult.getComValue().equals("[]"))) {
                        List<String> insItems = Arrays.asList("握力", "拉断力", "破断");
                        if (StringUtils.equals("电力产品实验室", insProduct.getLaboratory()) && insItems.contains(insProduct.getInspectionItem())) {
                            //电力产品实验室的握力和拉断力项目,参与检验的人员都要加工时
                            //查询参与检验的人员
                            List<InsSampleUser> insSampleUsers = insSampleUserMapper.selectList(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, insOrder.getId()));
                            insSampleUsers.forEach(user -> {
                                auxiliaryOutputWorkingHours.setCheckId(user.getUserId());//检测人
                                auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
                                auxiliaryOutputWorkingHours.setId(null);
                            });
                        } else {
                            if (insProduct.getInspectionItem().contains("弧垂")) {
                                // æ ·å“ä¸‹çš„æ£€éªŒé¡¹åŒ…含弧垂的个数
                                AuxiliaryOutputWorkingHours sampleCount = auxiliaryOutputWorkingHoursMapper.selectOne(new LambdaQueryWrapper<AuxiliaryOutputWorkingHours>()
                                        .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode()) // æ ·å“ç¼–号
                                        .eq(AuxiliaryOutputWorkingHours::getInspectionItem, parentInsProduct.getInspectionItem()) // æ£€éªŒé¡¹ç›®
                                        .and(item -> item.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode()) // éžåŠ ç­å§”æ‰˜å•å·
                                                .or()
                                                .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode())) // åŠ ç­å§”æ‰˜å•å·
                                );
                                auxiliaryOutputWorkingHours.setInspectionItem(parentInsProduct.getInspectionItem());
                                if (Objects.isNull(sampleCount)) {
                                    auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
                                }
                            } else {
                                auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
                            }
                        }
                    } else if (inspectItem.equals("应力应变") && inspectSubItem.equals("弹性模量")) {
                        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
                    }
                } catch (Exception e) {
                    log.error("工时新增失败-->",e);
                }
            } else {
                // æŸ¥è¯¢å½“前检验项的工时添加记录
                List<AuxiliaryOutputWorkingHours> oldRecords = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                        .eq(AuxiliaryOutputWorkingHours::getCheckId, userId)
                        .eq(AuxiliaryOutputWorkingHours::getInspectionItem, inspectItem)
                        .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, inspectSubItem)
                        .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
                        .and(i -> i.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())
                                .or()
                                .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode()))
                        .orderByAsc(AuxiliaryOutputWorkingHours::getDateTime)
                );
                List<String> special = Arrays.asList("温度循环", "热循环", "温升试验", "单根垂直燃烧", "消振评估");
                if (special.contains(inspectItem) || inspectItem.contains("松套管") || inspectSubItem.contains("松套管") ||
                        !Objects.isNull(insProduct.getInsFiberId()) ||
                        !Objects.isNull(insProduct.getInsFibersId())) {
                    // æ˜¯å¦éœ€è¦è·¨å¤©
                    if (isCross) {
                        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                        List<Integer> list = Arrays.asList(3, 4, 6); // ä¼‘息 è¯·å‡  å‡ºå·®
                        List<PerformanceShift> performanceShifts = performanceShiftMapper.selectList(new LambdaQueryWrapper<PerformanceShift>()
                                .eq(PerformanceShift::getUserId, userId)
                                .lt(PerformanceShift::getWorkTime, LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters))
                                .notIn(PerformanceShift::getShift, list)
                                .orderByDesc(PerformanceShift::getWorkTime));
                        String date = performanceShifts.get(0).getWorkTime().format(formatters); // å‰é¢æ­£å¸¸ä¸Šç­çš„æ—¥æœŸ
                        boolean addOrUpdate;
                        // è¿‡æ»¤å‡ºæ—¥æœŸä¸€è‡´çš„记录
                        List<AuxiliaryOutputWorkingHours> collect2 = oldRecords.stream().filter(item -> item.getDateTime().equals(date)).collect(Collectors.toList());
                        AuxiliaryOutputWorkingHours currentRecord = null;
                        if (CollectionUtils.isNotEmpty(collect2)) {
                            // æœ‰å°±æ›´æ–° æ²¡æœ‰å°±æ–°å¢ž
                            addOrUpdate = true;
                            currentRecord = collect2.get(collect2.size() - 1);
                        } else {
                            addOrUpdate = false;
                            // æ–°å¢žçš„æ—¥æœŸæ˜¯æœ‰åšå¤„理的,所以这里取oldRecords的最后一个
                            currentRecord = oldRecords.get(oldRecords.size() - 1);
                        }
                        specialWorkCount(currentRecord, date, isWithinRange, manHour, currentSampleId, parentInsProduct, auxiliaryOutputWorkingHours, formatters, oldRecords, k, addOrUpdate, insProduct,userId);
                    } else {
                        // ä¸éœ€è¦è·¨å¤©
                        //判断查询得到日期是否要与添加数据的日期一致,如果日期一致,则进行更新,否则新增
                        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                        String date = LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters);
                        boolean addOrUpdate;
                        // è¿‡æ»¤å‡ºæ—¥æœŸä¸€è‡´çš„记录
                        List<AuxiliaryOutputWorkingHours> collect2 = oldRecords.stream().filter(item -> item.getDateTime().equals(date)).collect(Collectors.toList());
                        AuxiliaryOutputWorkingHours oldRecord = null;
                        if (CollectionUtils.isNotEmpty(collect2)) {
                            // æœ‰å°±æ›´æ–° æ²¡æœ‰å°±æ–°å¢ž
                            addOrUpdate = true;
                            oldRecord = collect2.get(collect2.size() - 1);
                        } else {
                            addOrUpdate = false;
                            // æ–°å¢žçš„æ—¥æœŸæ˜¯æœ‰åšå¤„理的,所以这里取oldRecords的最后一个
                            oldRecord = oldRecords.get(oldRecords.size() - 1);
                        }
                        // ç‰¹æ®Šé¡¹å·¥æ—¶è®¡ç®—
                        specialWorkCount(oldRecord, date, isWithinRange, manHour, currentSampleId, parentInsProduct, auxiliaryOutputWorkingHours, formatters, oldRecords, k, addOrUpdate, insProduct,userId);
                    }
                }
            }
        }
        log.info("工时计算完成,productId:{}",k);
    }
    /**
     * ç‰¹æ®Šé¡¹å·¥æ—¶è®¡ç®—
     */
    public synchronized void specialWorkCount(AuxiliaryOutputWorkingHours oldRecord,String date,boolean isWithinRange,
                                              BigDecimal manHour,Integer currentSampleId,InsProduct parentInsProduct,
                                              AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours,
                                              DateTimeFormatter formatters,
                                              List<AuxiliaryOutputWorkingHours> oldRecords,
                                              String k,boolean addOrUpdate,
                                              InsProduct insProduct,Integer userId) {
        //判断得到日期是否已经含有数据 æœ‰å°±æ›´æ–° æ²¡æœ‰å°±æ–°å¢ž
        if(addOrUpdate){
            //更新工时 æ˜¯å¦åŠ ç­
            List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getInsSampleId, currentSampleId));
            String inspectionItem = oldRecord.getInspectionItem();
            String inspectionItemSubclass = oldRecord.getInspectionItemSubclass();
            switch (inspectionItem) {
                case "单根垂直燃烧":
                    //计算工时 æŸ¥çœ‹æ£€éªŒçš„个数是否与工时的个数一致(区分检验项和检验子项目)
                    int count1 = 0; // å·¥æ—¶çš„个数
                    InsProduct insProduct2 = insProductMapper.selectById(Integer.parseInt(k));
                    InsProductResult result = insProductResultMapper.selectList(new LambdaQueryWrapper<InsProductResult>()
                            .eq(InsProductResult::getInsProductId, insProduct2.getId())
                            .orderByAsc(InsProductResult::getId)).get(0);
                    List<Map> maps1 = JSONArray.parseArray(result.getInsValue(), Map.class);
                    for (Map map : maps1) {
                        if (Strings.isNotEmpty(map.get("v").toString())) {
                            count1++;
                        }
                    }
                    Integer oldAmount1 = 0;
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        if(a.getInspectionItem().equals(insProduct2.getInspectionItem()) &&
                                a.getInspectionItemSubclass().equals(insProduct2.getInspectionItemSubclass())){
                            oldAmount1 += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                        }
                    }// ä¹‹å‰çš„工时个数
                    if(count1 > oldAmount1) {
                        if(isWithinRange) {
                            // éžåŠ ç­
                            oldRecord.setOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                            oldRecord.setWorkTime( addAccuracy((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()),manHour.doubleValue())); // éžåŠ ç­å·¥æ—¶
                            oldRecord.setAmount((Objects.isNull(oldRecord.getAmount()) ? 0 : oldRecord.getAmount()) + 1); // éžåŠ ç­æ•°é‡
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                        }else {
                            // åŠ ç­
                            oldRecord.setOvertimeOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // åŠ ç­å§”æ‰˜å•å·
                            oldRecord.setOvertimeWorkTime(addAccuracy((Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0: oldRecord.getOvertimeWorkTime()),manHour.doubleValue() ));// åŠ ç­å·¥æ—¶
                            oldRecord.setOvertimeAmount((Objects.isNull(oldRecord.getOvertimeAmount()) ? 0 : oldRecord.getOvertimeAmount()) + 1); // åŠ ç­æ•°é‡
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                        }
                        auxiliaryOutputWorkingHoursMapper.updateById(oldRecord);
                    }
                    break;
                case "温度循环":
                    // æŸ¥è¯¢æ‰€æœ‰çš„æ£€éªŒè®°å½• æ ¹æ®productResult的insValue的个数 ä¸Ž oldRecord的个数进行比较
                    int all = 0; // æ‰€æœ‰çš„æ¸©åº¦å¾ªçŽ¯çš„ä¸ªæ•°
                    int allValue = 0; // æ‰€æœ‰çš„æ¸©åº¦å¾ªçŽ¯çš„æœ‰å€¼çš„ä¸ªæ•°
                    int count = 0; // å½“前次数的温度有值的个数
                    int countAll = 0; // å½“前次数的温度所有的个数
                    if(CollectionUtils.isNotEmpty(insProducts)) {
                        InsProduct insProduct3 = insProductMapper.selectById(Integer.parseInt(k));
                        // è¿‡æ»¤å‡ºå½“前次数的温度
                        List<InsProduct> collect = insProducts.stream()
                                .filter(item -> item.getInspectionItem().equals(insProduct3.getInspectionItem()) &&
                                        item.getInspectionItemSubclass().equals(insProduct3.getInspectionItemSubclass()))
                                .collect(Collectors.toList());
                        countAll = collect.size();
                        all = insProducts.size();
                        if(CollectionUtils.isNotEmpty(collect)) {
                            for(InsProduct insProduct1 : collect) {
                                // æŸ¥è¯¢insProductResult拿到insValue的有值的个数
                                InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                        .eq(InsProductResult::getInsProductId, insProduct1.getId()));
                                if(!Objects.isNull(insProductResult)) {
                                    // insProductResult不为空,获取有值的个数
                                    List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
                                    for (Map map : maps) {
                                        if (Strings.isNotEmpty(map.get("v").toString())) {
                                            count++;
                                            break;
                                        }
                                    }
                                }
                            }
                            // æ‰€æœ‰ æœ‰å€¼çš„个数
                            for (InsProduct insProduct1 : insProducts) {
                                // æŸ¥è¯¢insProductResult拿到insValue的有值的个数
                                InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                        .eq(InsProductResult::getInsProductId, insProduct1.getId()));
                                if(!Objects.isNull(insProductResult)) {
                                    // insProductResult不为空,获取有值的个数
                                    List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
                                    for (Map map : maps) {
                                        if (Strings.isNotEmpty(map.get("v").toString())) {
                                            allValue++;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    Integer oldAmount = 0; // å·²ç»æ·»åŠ çš„å·¥æ—¶ä¸ªæ•°
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    if(all > oldAmount && count < countAll && allValue > oldAmount) {
                        if(isWithinRange) {
                            // éžåŠ ç­å·¥æ—¶
                            oldRecord.setOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                            oldRecord.setAmount((Objects.isNull(oldRecord.getAmount()) ? 0 : oldRecord.getAmount()) + 1);
                            oldRecord.setWorkTime(addAccuracy((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()),manHour.doubleValue()));
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime()));
                        }else {
                            // åŠ ç­å·¥æ—¶
                            oldRecord.setOvertimeOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                            oldRecord.setOvertimeAmount((Objects.isNull(oldRecord.getOvertimeAmount()) ? 0 : oldRecord.getOvertimeAmount()) + 1);
                            oldRecord.setOvertimeWorkTime(addAccuracy((Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime()),manHour.doubleValue() ));
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime()));
                        }
                        auxiliaryOutputWorkingHoursMapper.updateById(oldRecord);
                    }
                    break;
                case "温升试验":
                    // æŒ‰ç…§æ£€éªŒé¡¹åˆ†ç»„ æœ‰å‡ ä¸ªæ£€éªŒå€¼å°±ç®—几次工时
                    Map<String, List<InsProduct>> collect = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()))
                            .stream()
                            .collect(Collectors.groupingBy(InsProduct::getInspectionItem));
                    int group = 0;
                    for (Map.Entry<String,List<InsProduct>> entry : collect.entrySet()) {
                        int minValue = Integer.MIN_VALUE;
                        List<InsProduct> insProducts1 = entry.getValue();
                        for (InsProduct product1 : insProducts1) {
                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                    .eq(InsProductResult::getInsProductId, product1.getId()));
                            if(!Objects.isNull(insProductResult)) {
                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class);
                                // æœ€é•¿çš„insValue å°±æœ‰å‡ ç»„工时
                                if(maps.size() > minValue) {
                                    minValue = maps.size();
                                }
                            }
                        }
                        if(minValue != Integer.MIN_VALUE) {
                            group += minValue;
                        }
                    }
                    double oldWorkTime2 = 0;
                    double oldAmount2 = 0;
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldWorkTime2 += (Objects.isNull(a.getOvertimeWorkTime()) ? 0 : a.getOvertimeWorkTime()) + (Objects.isNull(a.getWorkTime()) ? 0 : a.getWorkTime());
                        oldAmount2+= (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    // æ£€éªŒçš„组数大于已经添加的组数就要更新工时
                    int oldGroup1 = 0;
                    if(manHour.doubleValue() != 0) {
                        oldGroup1 =(int) (oldWorkTime2 / manHour.doubleValue());
                    }
                    if((group  > oldGroup1) && (group > oldAmount2)) {
                        if(isWithinRange) {
                            // éžåŠ ç­
                            oldRecord.setOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                            oldRecord.setAmount((Objects.isNull(oldRecord.getAmount()) ? 0 : oldRecord.getAmount()) + 1); // éžåŠ ç­æ•°é‡
                            oldRecord.setWorkTime(accuracy(manHour,oldRecord.getAmount())); // éžåŠ ç­å·¥æ—¶
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                        }else {
                            // åŠ ç­
                            oldRecord.setOvertimeOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // åŠ ç­å§”æ‰˜å•å·
                            oldRecord.setOvertimeAmount((Objects.isNull(oldRecord.getOvertimeAmount()) ? 0 : oldRecord.getOvertimeAmount()) + 1); // åŠ ç­æ•°é‡
                            oldRecord.setOvertimeWorkTime(accuracy(manHour,oldRecord.getOvertimeAmount())); // åŠ ç­å·¥æ—¶
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                        }
                        auxiliaryOutputWorkingHoursMapper.updateById(oldRecord);
                    }
                    break;
                case "热循环":
                    // æŒ‰ç…§æ£€éªŒé¡¹åˆ†ç»„ æœ‰å‡ ä¸ªæ£€éªŒå€¼å°±ç®—几次工时
                    Map<String, List<InsProduct>> collect1 = new HashMap<>();
                    if(Objects.nonNull(parentInsProduct)){
                        collect1 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                        .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()))
                                .stream()
                                .collect(Collectors.groupingBy(InsProduct::getInspectionItem));
                    }
                    int group1 = 0;
                    for (Map.Entry<String,List<InsProduct>> entry : collect1.entrySet()) {
                        int minValue = Integer.MIN_VALUE;
                        List<InsProduct> insProducts1 = entry.getValue();
                        for (InsProduct product1 : insProducts1) {
                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                    .eq(InsProductResult::getInsProductId, product1.getId()));
                            if(!Objects.isNull(insProductResult)) {
                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class);
                                // æœ€é•¿çš„insValue å°±æœ‰å‡ ç»„工时
                                if(maps.size() > minValue) {
                                    minValue = maps.size();
                                }
                            }
                        }
                        if(minValue != Integer.MIN_VALUE) {
                            group1 += minValue;
                        }
                    }
                    double oldWorkTime3 = 0;
                    double oldAmount3 = 0;
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldWorkTime3 += (Objects.isNull(a.getOvertimeWorkTime()) ? 0 : a.getOvertimeWorkTime()) + (Objects.isNull(a.getWorkTime()) ? 0 : a.getWorkTime());
                        oldAmount3+= (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    // æ£€éªŒçš„组数大于已经添加的组数就要更新工时
                    int oldGroup = 0;
                    if(manHour.doubleValue() != 0) {
                        oldGroup =(int) (oldWorkTime3 / manHour.doubleValue());
                    }
                    if((group1  > oldGroup) && (group1 > oldAmount3)) {
                        if(isWithinRange) {
                            // éžåŠ ç­
                            oldRecord.setOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                            oldRecord.setAmount((Objects.isNull(oldRecord.getAmount()) ? 0 : oldRecord.getAmount()) + 1); // éžåŠ ç­æ•°é‡
                            oldRecord.setWorkTime(accuracy(manHour, oldRecord.getAmount())); // éžåŠ ç­å·¥æ—¶
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                        }else {
                            // åŠ ç­
                            oldRecord.setOvertimeOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // åŠ ç­å§”æ‰˜å•å·
                            oldRecord.setOvertimeAmount((Objects.isNull(oldRecord.getOvertimeAmount()) ? 0 : oldRecord.getOvertimeAmount()) + 1); // åŠ ç­æ•°é‡
                            oldRecord.setOvertimeWorkTime(accuracy(manHour,oldRecord.getOvertimeAmount())); // åŠ ç­å·¥æ—¶
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                        }
                        auxiliaryOutputWorkingHoursMapper.updateById(oldRecord);
                    }
                    break;
                case "消振评估":
                    // æ ¹æ®åæ ‡æ¥è¿›è¡Œå·¥æ—¶çš„æ·»åŠ 
                    InsProductResult result1 = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                            .eq(InsProductResult::getInsProductId, insProduct.getId()));
                    // å·¥æ—¶çš„个数
                    int count4 = 0;
                    if(!Objects.isNull(result1)) {
                        List<Map> maps = JSONArray.parseArray(result1.getInsValue(), Map.class);
                        // æ ¹æ®åæ ‡æ¥è¿›è¡Œåˆ†ç»„
                        Map<Object, List<Map>> coordinate = maps.stream().collect(Collectors.groupingBy(item -> item.get("r")));
                        Iterator<Map.Entry<Object, List<Map>>> iterator = coordinate.entrySet().iterator();
                        while (iterator.hasNext()) {
                            Map.Entry<Object, List<Map>> entry = iterator.next();
                            List<Map> value = entry.getValue();
                            if(value.size() > count4) {
                                count4 = value.size();
                            }
                        }
                    }
                    Integer oldAmount4 = 0; // å·²ç»æ·»åŠ çš„å·¥æ—¶ä¸ªæ•°
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldAmount4 += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    if(count4 > oldAmount4) {
                        if(isWithinRange) {
                            // éžåŠ ç­å·¥æ—¶
                            oldRecord.setOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                            oldRecord.setAmount((Objects.isNull(oldRecord.getAmount()) ? 0 : oldRecord.getAmount()) + 1); // éžåŠ ç­ä¸ªæ•°
                            oldRecord.setWorkTime(addAccuracy((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()),manHour.doubleValue())); // éžåŠ ç­å·¥æ—¶
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§å‡ºå·¥æ—¶
                        }else {
                            // åŠ ç­å·¥æ—¶
                            oldRecord.setOvertimeOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                            oldRecord.setOvertimeAmount((Objects.isNull(oldRecord.getOvertimeAmount()) ? 0 : oldRecord.getOvertimeAmount()) + 1); // éžåŠ ç­ä¸ªæ•°
                            oldRecord.setOvertimeWorkTime(addAccuracy((Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime()),manHour.doubleValue() ));
                            oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                    (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§å‡ºå·¥æ—¶
                        }
                        auxiliaryOutputWorkingHoursMapper.updateById(oldRecord);
                    }
                    break;
            }
            // æ¾å¥—管 æ›´æ–°
            if((inspectionItem.contains("松套管") || inspectionItemSubclass.contains("松套管") ||
                    !Objects.isNull(insProduct.getInsFiberId()) ||
                    !Objects.isNull(insProduct.getInsFibersId())) && Objects.isNull(insProduct.getSpecialItemParentId()) && !insProduct.getInspectionItem().equals("光纤接头损耗")) {
                InsProduct product = insProductMapper.selectById(Integer.parseInt(k));
                // æŸ¥è¯¢æ ·å“ä¸‹é¢æ‰€æœ‰çš„æ¾å¥—管 å¹¶ä¸”过滤出检验项和检验子项相同的数据
                List<InsProduct> collect = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                .eq(InsProduct::getInsSampleId, currentSampleId)
                                .and(item -> item.like(InsProduct::getInspectionItem, "松套管")
                                        .or()
                                        .like(InsProduct::getInspectionItemSubclass, "松套管")
                                        .or()
                                        .isNotNull(InsProduct::getInsFibersId)
                                        .or()
                                        .isNotNull(InsProduct::getInsFiberId))).stream()
                        .filter(item -> item.getInspectionItem().equals(product.getInspectionItem()) &&
                                item.getInspectionItemSubclass().equals(product.getInspectionItemSubclass()))
                        .collect(Collectors.toList());
                // æ£€éªŒæ€»å…±çš„个数
                int count = 0;
                for (InsProduct insProduct1 : collect) {
                    // æŸ¥è¯¢result表
                    InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                            .eq(InsProductResult::getInsProductId, insProduct1.getId()));
                    //  å¦‚果有值则进行数量相加
                    if(Objects.isNull(insProductResult)) {
                        continue;
                    }
                    count++;
//                    List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
//                    for(Map map : maps) {
//                        if(Strings.isNotEmpty(map.get("v").toString())) {
//                            count++;
//                        }
//                    }
                }
                // å·¥æ—¶çš„个数
                Integer oldAmount = 0;
                for(AuxiliaryOutputWorkingHours a : oldRecords) {
                    oldAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                }
                if((count > oldAmount)) {
                    if(isWithinRange) {
                        // éžåŠ ç­
                        oldRecord.setOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
                        oldRecord.setAmount((Objects.isNull(oldRecord.getAmount()) ? 0 : oldRecord.getAmount()) + 1); // éžåŠ ç­æ•°é‡
                        oldRecord.setWorkTime(accuracy(manHour,oldRecord.getAmount())); // éžåŠ ç­å·¥æ—¶
                        oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                    }else {
                        // åŠ ç­
                        oldRecord.setOvertimeOrderNo(StringUtils.isNotEmpty(oldRecord.getOrderNo()) ? oldRecord.getOrderNo() : oldRecord.getOvertimeOrderNo()); // åŠ ç­å§”æ‰˜å•å·
                        oldRecord.setOvertimeAmount((Objects.isNull(oldRecord.getOvertimeAmount()) ? 0 : oldRecord.getOvertimeAmount()) + 1); // åŠ ç­æ•°é‡
                        oldRecord.setOvertimeWorkTime(accuracy(manHour,oldRecord.getOvertimeAmount())); // åŠ ç­å·¥æ—¶
                        oldRecord.setOutputWorkTime((Objects.isNull(oldRecord.getWorkTime()) ? 0 : oldRecord.getWorkTime()) +
                                (Objects.isNull(oldRecord.getOvertimeWorkTime()) ? 0 : oldRecord.getOvertimeWorkTime())); // äº§é‡å·¥æ—¶
                    }
                    auxiliaryOutputWorkingHoursMapper.updateById(oldRecord);
                }
            }
        }else {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            DateTime parse = DateUtil.parse(LocalDateTime.now().format(formatter));
            // æ–°å¢žå·¥æ—¶
            AuxiliaryOutputWorkingHours addOutputWorkingHours = new AuxiliaryOutputWorkingHours();
            BeanUtils.copyProperties(oldRecord, addOutputWorkingHours);
            addOutputWorkingHours.setDateTime(date); // æ—¥æœŸ
            addOutputWorkingHours.setOvertimeOrderNo(auxiliaryOutputWorkingHours.getOvertimeOrderNo()); // åŠ ç­å§”æ‰˜å•å·
            addOutputWorkingHours.setOrderNo(auxiliaryOutputWorkingHours.getOrderNo()); // éžåŠ ç­å§”æ‰˜å•å·
            addOutputWorkingHours.setId(null);
            addOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ?
                    auxiliaryOutputWorkingHours.getOvertimeWorkTime() : 0) +
                    (ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : 0));//产量工时
            addOutputWorkingHours.setWeekDay(getWeek(LocalDateTime.now().format(formatters)));//星期
            addOutputWorkingHours.setCheckId(userId);//检测人
            addOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
            if(isWithinRange) {
                addOutputWorkingHours.setWorkTime(manHour.doubleValue()); // éžåŠ ç­å·¥æ—¶
                addOutputWorkingHours.setOvertimeWorkTime(null);
                addOutputWorkingHours.setAmount(1);//非加班数量
                addOutputWorkingHours.setOvertimeAmount(null);//加班数量
            }else {
                addOutputWorkingHours.setOvertimeWorkTime(manHour.doubleValue()); // åŠ ç­å·¥æ—¶
                addOutputWorkingHours.setWorkTime(null);
                addOutputWorkingHours.setOvertimeAmount(1);//加班数量
                addOutputWorkingHours.setAmount(null);//非加班数量
            }
            List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getInsSampleId, currentSampleId));
            String inspectionItem = oldRecord.getInspectionItem();
            String inspectionItemSubclass = oldRecord.getInspectionItemSubclass();
            switch (inspectionItem) {
                case "消振评估":
                    // æ ¹æ®åæ ‡æ¥è¿›è¡Œå·¥æ—¶çš„æ·»åŠ 
                    InsProductResult result1 = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                            .eq(InsProductResult::getInsProductId, insProduct.getId()));
                    // å·¥æ—¶çš„个数
                    int count4 = 0;
                    if(!Objects.isNull(result1)) {
                        List<Map> maps = JSONArray.parseArray(result1.getInsValue(), Map.class);
                        // æ ¹æ®åæ ‡æ¥è¿›è¡Œåˆ†ç»„
                        Map<Object, List<Map>> coordinate = maps.stream().collect(Collectors.groupingBy(item -> item.get("r")));
                        Iterator<Map.Entry<Object, List<Map>>> iterator = coordinate.entrySet().iterator();
                        while (iterator.hasNext()) {
                            Map.Entry<Object, List<Map>> entry = iterator.next();
                            List<Map> value = entry.getValue();
                            if(value.size() > count4) {
                                count4 = value.size();
                            }
                        }
                    }
                    Integer oldAmount4 = 0; // å·²ç»æ·»åŠ çš„å·¥æ—¶ä¸ªæ•°
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldAmount4 += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    if(count4 > oldAmount4) {
                        auxiliaryOutputWorkingHoursMapper.insert(addOutputWorkingHours);
                    }
                    break;
                case "温度循环":
                    int count = 0; // å·¥æ—¶çš„个数
                    if(CollectionUtils.isNotEmpty(insProducts)) {
                        for(InsProduct insProduct1 : insProducts) {
                            // æŸ¥è¯¢insProductResult拿到insValue的有值的个数
                            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                    .eq(InsProductResult::getInsProductId, insProduct1.getId()));
                            if(!Objects.isNull(insProductResult)) {
                                // insProductResult不为空,获取有值的个数
                                List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
                                for (Map map : maps) {
                                    if (Strings.isNotEmpty(map.get("v").toString())) {
                                        count++;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    Integer oldAmount = 0;
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    if(count > oldAmount) {
                        auxiliaryOutputWorkingHoursMapper.insert(addOutputWorkingHours);
                    }
                    break;
                case "单根垂直燃烧":
                    // æŸ¥çœ‹ä¸ªæ•° æ˜¯å¦ä¸Žå·¥æ—¶çš„个数一致,如果检验的个数大于工时的个数,那么就新增
                    int count1 = 0;
                    if(CollectionUtils.isNotEmpty(insProducts)) {
                        for(InsProduct insProduct1 : insProducts) {
                            // æŸ¥è¯¢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())) {
                                        count1++;
                                    }
                                }
                            }
                        }
                    }
                    Integer oldAmount1 = 0;
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldAmount1 += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    if(count1 > oldAmount1) {
                        auxiliaryOutputWorkingHoursMapper.insert(addOutputWorkingHours);
                    }
                    break;
                case "温升试验":
                    // æŒ‰ç…§æ£€éªŒé¡¹åˆ†ç»„ æœ‰å‡ ä¸ªæ£€éªŒå€¼å°±ç®—几次工时
                    Map<String, List<InsProduct>> collect = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()))
                            .stream()
                            .collect(Collectors.groupingBy(InsProduct::getInspectionItem));
                    int group = 0;
                    double oldWorkTime2 = 0; // ä¹‹å‰çš„工时
                    double oldAmount2 = 0; // ä¹‹å‰çš„æ•°é‡
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldWorkTime2 += (Objects.isNull(a.getOvertimeWorkTime()) ? 0 : a.getOvertimeWorkTime()) + (Objects.isNull(a.getWorkTime()) ? 0 : a.getWorkTime());
                        oldAmount2+= (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    for (Map.Entry<String,List<InsProduct>> entry : collect.entrySet()) {
                        int minValue = Integer.MIN_VALUE;
                        List<InsProduct> insProducts1 = entry.getValue();
                        for (InsProduct product1 : insProducts1) {
                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                    .eq(InsProductResult::getInsProductId, product1.getId()));
                            if(!Objects.isNull(insProductResult)) {
                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class);
                                // æœ€é•¿çš„insValue å°±æœ‰å‡ ç»„工时
                                if(maps.size() > minValue) {
                                    minValue = maps.size();
                                }
                            }
                        }
                        if(minValue != Integer.MIN_VALUE) {
                            group += minValue;
                        }
                    }
                    // æ£€éªŒçš„组数大于已经添加的组数就要更新工时
                    int oldGroup = 0;
                    if(manHour.doubleValue() != 0) {
                        oldGroup =(int) (oldWorkTime2 / manHour.doubleValue());
                    }
                    // æ£€éªŒçš„组数大于已经添加的组数就要更新工时
                    if(group  > oldGroup && group > oldAmount2) {
                        auxiliaryOutputWorkingHoursMapper.insert(addOutputWorkingHours);
                    }
                    break;
                case "热循环":
                    // æŒ‰ç…§æ£€éªŒé¡¹åˆ†ç»„ æœ‰å‡ ä¸ªæ£€éªŒå€¼å°±ç®—几次工时
                    Map<String, List<InsProduct>> collect1 = new HashMap<>();
                    if(Objects.nonNull(parentInsProduct)){
                        collect1 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                        .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()))
                                .stream()
                                .collect(Collectors.groupingBy(InsProduct::getInspectionItem));
                    }
                    int group1 = 0;
                    for (Map.Entry<String,List<InsProduct>> entry : collect1.entrySet()) {
                        int minValue = Integer.MIN_VALUE;
                        List<InsProduct> insProducts1 = entry.getValue();
                        for (InsProduct product1 : insProducts1) {
                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                    .eq(InsProductResult::getInsProductId, product1.getId()));
                            if(!Objects.isNull(insProductResult)) {
                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class);
                                // æœ€é•¿çš„insValue å°±æœ‰å‡ ç»„工时
                                if(maps.size() > minValue) {
                                    minValue = maps.size();
                                }
                            }
                        }
                        if(minValue != Integer.MIN_VALUE) {
                            group1 += minValue;
                        }
                    }
                    double oldWorkTime3 = 0; // ä¹‹å‰çš„工时
                    double oldAmount3 = 0; // ä¹‹å‰çš„æ•°é‡
                    for(AuxiliaryOutputWorkingHours a : oldRecords) {
                        oldWorkTime3 += (Objects.isNull(a.getOvertimeWorkTime()) ? 0 : a.getOvertimeWorkTime()) + (Objects.isNull(a.getWorkTime()) ? 0 : a.getWorkTime());
                        oldAmount3+= (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                    }
                    // æ£€éªŒçš„组数大于已经添加的组数就要更新工时
                    int oldGroup1 = 0;
                    if(manHour.doubleValue() != 0) {
                        oldGroup1 =(int) (oldWorkTime3 / manHour.doubleValue());
                    }
                    // æ£€éªŒçš„组数大于已经添加的组数就要更新工时
                    if((group1  > oldGroup1) && (group1 > oldAmount3)) {
                        auxiliaryOutputWorkingHoursMapper.insert(addOutputWorkingHours);
                    }
                    break;
            }
            if((inspectionItem.contains("松套管") || inspectionItemSubclass.contains("松套管") ||
                    !Objects.isNull(insProduct.getInsFiberId()) ||
                    !Objects.isNull(insProduct.getInsFibersId())) && Objects.isNull(insProduct.getSpecialItemParentId()) && !insProduct.getInspectionItem().equals("光纤接头损耗")) {
                InsProduct product = insProductMapper.selectById(Integer.parseInt(k));
                // æŸ¥è¯¢æ ·å“ä¸‹é¢æ‰€æœ‰çš„æ¾å¥—管 å¹¶ä¸”过滤出检验项和检验子项相同的数据
                List<InsProduct> collect = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                .eq(InsProduct::getInsSampleId, currentSampleId)
                                .and(item -> item.like(InsProduct::getInspectionItem, "松套管")
                                        .or()
                                        .like(InsProduct::getInspectionItemSubclass, "松套管")
                                        .or()
                                        .isNotNull(InsProduct::getInsFiberId)
                                        .or()
                                        .isNotNull(InsProduct::getInsFibersId))).stream()
                        .filter(item -> item.getInspectionItem().equals(product.getInspectionItem()) &&
                                item.getInspectionItemSubclass().equals(product.getInspectionItemSubclass()))
                        .collect(Collectors.toList());
                // æ£€éªŒæ€»å…±çš„个数
                int count = 0;
                for (InsProduct insProduct1 : collect) {
                    // æŸ¥è¯¢result表
                    InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                            .eq(InsProductResult::getInsProductId, insProduct1.getId()));
                    // åŽ»é™¤å½“å‰æ£€éªŒé¡¹ å¦‚果有值则进行数量相加
                    if(Objects.isNull(insProductResult)) {
                        continue;
                    }
                    count++;
//                    List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
//                    for(Map map : maps) {
//                        if(Strings.isNotEmpty(map.get("v").toString())) {
//                            count++;
//                        }
//                    }
                }
                // å·¥æ—¶çš„个数
                Integer oldAmount = 0;
                for(AuxiliaryOutputWorkingHours a : oldRecords) {
                    oldAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                }
                // è¾“入的个数 å¤§äºŽ çŽ°æœ‰å·¥æ—¶çš„ä¸ªæ•°æ‰è¿›è¡Œæ·»åŠ 
                if(count > oldAmount) {
                    auxiliaryOutputWorkingHoursMapper.insert(addOutputWorkingHours);
                }
            }
        }
    }
    /**
     * ç²¾åº¦é—®é¢˜ ä¹˜æ³•
     */
    public double accuracy(BigDecimal manHour, int count){
        return  manHour.multiply(BigDecimal.valueOf(count)).setScale(4, RoundingMode.HALF_UP).doubleValue();
    }
    /**
     * ç²¾åº¦é—®é¢˜ åŠ æ³•
     */
    public double addAccuracy(double manHour, double count){
        return  BigDecimal.valueOf(manHour).add(BigDecimal.valueOf(count)).setScale(4, RoundingMode.HALF_UP).doubleValue();
    }
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹å¯¹åº”标准库配置的工时信息
     * @param insProduct
     * @return
     */
    public StandardProductVO getInspectWorkHourAndGroup(InsProduct insProduct){
        StandardProductVO standardProductVO = new StandardProductVO();
        if(!Objects.isNull(insProduct)){
            //查询对应标准库
            List<StandardProductVO> productVO = standardProductListMapper.getStandardProductByInsProduct(
                    insProduct.getLaboratory(),
                    insProduct.getSampleType(),
                    insProduct.getSample(),
                    insProduct.getModel(),
                    insProduct.getInspectionItem(),
                    insProduct.getInspectionItemSubclass(),
                    insProduct.getSonLaboratory(),
                    insProduct.getStandardMethodListId());
            if(!productVO.isEmpty()){
                standardProductVO = productVO.get(0);
            }
            //有区间的检验项,取检验项存的工时信息
            if(StringUtils.isNotBlank(insProduct.getSection()) && StringUtils.isNotBlank(standardProductVO.getSection())){
                try {
                    ObjectMapper objectMapper = new ObjectMapper();
                    //区间设置
                    List<String> sectionList = (List<String>)objectMapper.readValue(standardProductVO.getSection(), List.class);
                    //选中区间的下标
                    int i = sectionList.indexOf(insProduct.getSection());
                    //获取对应下标的工时和工时分组
                    List<Double> hourList = (List<Double>)objectMapper.readValue(standardProductVO.getManHour(), List.class);
                    standardProductVO.setManHour(String.valueOf(hourList.get(i)));
                } catch (JsonProcessingException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return standardProductVO;
    }
    public static String getWeek(String dayStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = sdf.parse(dayStr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            return getWeekDay(dayOfWeek);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String getWeekDay(int dayOfWeek) {
        switch (dayOfWeek) {
            case Calendar.MONDAY:
                return "周一";
            case Calendar.TUESDAY:
                return "周二";
            case Calendar.WEDNESDAY:
                return "周三";
            case Calendar.THURSDAY:
                return "周四";
            case Calendar.FRIDAY:
                return "周五";
            case Calendar.SATURDAY:
                return "周六";
            case Calendar.SUNDAY:
                return "周日";
            default:
                return "未知";
        }
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/amqp/constants/ExchangeConstants.java
ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/constant/ExchangeConstants.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.common.constant;
package com.ruoyi.inspect.amqp.constants;
public class ExchangeConstants {
inspect-server/src/main/java/com/ruoyi/inspect/amqp/constants/QueueConstants.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.inspect.amqp.constants;
public class QueueConstants {
    public final static String GX_QUEUE="gx_insert_work_time_queue";
    public final static String CL_QUEUE="cl_insert_work_time_queue";
    public final static String JX_QUEUE="jx_insert_work_time_queue";
    public final static String DL_QUEUE="dl_insert_work_time_queue";
}
inspect-server/src/main/java/com/ruoyi/inspect/amqp/constants/RouterKeyConstants.java
ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/constant/RouterKeyConstants.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.common.constant;
package com.ruoyi.inspect.amqp.constants;
/**
 * å·¥æ—¶é˜Ÿåˆ—路由主键常量
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
package com.ruoyi.inspect.controller;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.pojo.InsOrderFile;
import com.ruoyi.inspect.service.InsOrderFileService;
import com.ruoyi.inspect.service.InsOrderPlanService;
import com.ruoyi.inspect.service.InsProductService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
 * æ£€éªŒä»»åŠ¡-控制层
 */
@RestController
@RequestMapping("/insOrderPlan")
@Api(tags = "检验任务")
@AllArgsConstructor
public class InsOrderPlanController {
    private InsOrderPlanService insOrderPlanService;
    private InsOrderFileService insOrderFileService;
    private InsProductService insProductService;
    @ApiOperation(value = "动态获取tab表头")
    @GetMapping("/getTabHeader")
    public Result<?> getTabHeader(@RequestParam("sonLaboratory") String sonLaboratory, String samples) {
        return Result.success(insOrderPlanService.getTabHeader(sonLaboratory, samples));
    }
    @ApiOperation(value = "查看结果按钮")
    @PostMapping("/getInsOrderPlanList")
    public Result getInsOrderPlanList(@RequestBody QueryResultDTO queryResultDTO) {
        return Result.success(insOrderPlanService.getInsOrderPlanList(queryResultDTO));
    }
    @ApiOperation(value = "导出委托费用")
    @GetMapping("/exportCommissionFees")
    public void exportCommissionFees(Map<String, Object> data,HttpServletResponse response) {
         insOrderPlanService.exportCommissionFees(data,response);
    }
    @ApiOperation(value = "导出待检任务")
    @GetMapping("/exportUnInsProducts")
    public void exportUnInsProducts(UnInsProductsDTO unInsProductsDTO, HttpServletResponse response) {
         insOrderPlanService.exportUnInsProducts(unInsProductsDTO,response);
    }
    @ApiOperation(value = "导出查看检验结果Excel")
    @PostMapping("/exportInsOrderPlanResult")
    public void exportInsOrderPlanResult(@RequestBody QueryResultDTO data, HttpServletResponse response) {
        insOrderPlanService.exportInsOrderPlanResult(data, response);
    }
    @ApiOperation(value = "查看检验任务列表")
    @GetMapping("/selectInsOrderPlanList")
    public Result selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
        return Result.success(insOrderPlanService.selectInsOrderPlanList(page, insOrderPlanDTO));
    }
    @ApiOperation(value = "检验单详情-任务切换")
    @GetMapping("/inspectionOrderDetailsTaskSwitching")
    public Result inspectionOrderDetailsTaskSwitching(Page page,InsOrderPlanDTO insOrderPlanDTO) {
        return Result.success(insOrderPlanService.inspectionOrderDetailsTaskSwitching(page, insOrderPlanDTO));
    }
    @ApiOperation(value = "认领按钮")
    @PostMapping("/claimInsOrderPlan")
    public Result claimInsOrderPlan(@RequestBody InsOrderPlanDTO data) {
        return Result.success(insOrderPlanService.claimInsOrderPlan(data));
    }
    @ApiOperation(value = "检验按钮")
    @GetMapping("/doInsOrder")
    public Result<?> doInsOrder(Integer id, String laboratory) {
        return Result.success(insOrderPlanService.doInsOrder(id, laboratory));
    }
    @ApiOperation(value = "切换套管/光纤/光纤带记录模版查询检验内容")
    @GetMapping("/getReportModel")
    public Result<?> getReportModel(Integer sampleId, String sonLaboratory) {
        return Result.success(insOrderPlanService.getReportModel(sampleId,sonLaboratory));
    }
    @GetMapping("/getInsProduct")
    @ApiOperation("获取检验项目和模板内容")
    public Result<?> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request) {
        return Result.success(insOrderPlanService.getInsProduct(id, type, laboratory, request));
    }
    @ApiOperation(value = "交接按钮")
    @PostMapping("/upPlanUser")
    public Result<?> upPlanUser(Integer userId, Integer orderId, String sonLaboratory) {
        return Result.success(insOrderPlanService.upPlanUser(userId, orderId, sonLaboratory));
    }
    @ApiOperation(value = "判断交接的试验室")
    @GetMapping("/upPlanUser2")
    public Result<?> upPlanUser2(Integer orderId) {
        return Result.success(insOrderPlanService.upPlanUser2(orderId));
    }
    @ApiOperation(value = "复核按钮")
    @PostMapping("/verifyPlan")
    public Result<?> verifyPlan(Integer orderId, String laboratory, Integer type, String tell) {
        return Result.success(insOrderPlanService.verifyPlan(orderId, laboratory, type, tell));
    }
    @ApiOperation(value = "校验检验任务提交")
    @PostMapping("/checkSubmitPlan")
    public Result<?> checkSubmitPlan(Integer orderId, String laboratory, String temperature,String humidity) {
        return Result.success(insOrderPlanService.checkSubmitPlan(orderId, laboratory ,temperature,humidity));
    }
    @ApiOperation(value = "提交检验任务")
    @PostMapping("/submitPlan")
    public Result<?> submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode) {
        int num = insOrderPlanService.submitPlan(orderId, laboratory, verifyUser, entrustCode);
        return num == 1 ? Result.success() : Result.fail("提交失败,部分项目还未进行检验");
    }
    /**
     *
     * @param orderId
     * @return
     */
    @GetMapping("/getEquipName")
    public Result<?> getEquipName(@RequestParam("orderId") Integer orderId,@RequestParam("sonLaboratory") String sonLaboratory) {
        return Result.success(insOrderPlanService.getEquipName(orderId,sonLaboratory));
    }
    /**
     * @param param         æ¨¡æ¿å†…容
     * @param currentTable  å½“前模板id
     * @param sampleId      å½“前样品id
     * @param orderId       å½“前订单id
     * @param sonLaboratory å­è¯•验室
     * @return
     */
    @ApiOperation(value = "保存检验内容")
    @PostMapping("/saveInsContext")
    public Result<?> saveInsContext(String param, Integer currentTable, Integer sampleId, Integer orderId, String sonLaboratory,Boolean isDelete) {
        Map<String, Object> param2 = JSON.parseObject(param, Map.class);
        insOrderPlanService.saveInsContext(param2, currentTable, sampleId, orderId, sonLaboratory,isDelete);
        return Result.success();
    }
    @ApiOperation(value = "查看检验单下的附件列表")
    @GetMapping("/getFileList")
    public Result<?> getFileList(Page page,InsOrderFile insOrderFile) {
        return Result.success(insOrderPlanService.getFileList(page, insOrderFile));
    }
    @ApiOperation(value = "上传附件按钮")
    @PostMapping("/uploadFile")
    public Result<?> uploadFile(Integer orderId, MultipartFile file) {
        return Result.success(insOrderPlanService.uploadFile(orderId, file));
    }
    @ApiOperation(value = "删除附件按钮")
    @PostMapping("/delfile")
    public Result<?> delfile(Integer id) {
        return Result.success(insOrderFileService.removeById(id));
    }
    @ApiOperation(value = "下载附件")
    @GetMapping("/downFile")
    public Result<?> downFile(Integer id) {
        InsOrderFile insOrderFile = insOrderFileService.getById(id);
        HashMap<String, Object> map = new HashMap<>();
        map.put("type", insOrderFile.getType());
        map.put("fileUrl", insOrderFile.getFileUrl());
        return Result.success(map);
    }
    @ApiOperation(value = "填写温度与湿度")
    @PostMapping("/write")
    public Result<?> write(@RequestBody InsProductDto insProductDto) {
        return Result.success(insProductService.write(insProductDto));
    }
    @ApiOperation(value = "温度循环查看列表数据(包括通过样品id,循环次数,温度,循环次数进行筛选)")
    @GetMapping("/temCycle")
    public Result<?> temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass) {
        return Result.success(insOrderPlanService.temCycle(sampleId, inspectionItem, inspectionItemSubclass));
    }
    @ApiOperation(value = "弧垂特殊项查看列表数据")
    @GetMapping("/getSagTemperatureProducts")
    public Result<?> getSagTemperatureProducts(Integer sampleId) {
        return Result.success(insOrderPlanService.getSagTemperatureProducts(sampleId));
    }
    @ApiOperation(value = "(电力的应力应变)保存检验内容")
    @PostMapping("/saveInsContext2")
    public Result<?> saveInsContext2(@RequestBody InsProductResultDTO insProductResult) {
        return Result.success(insOrderPlanService.saveInsContext2(insProductResult));
    }
    @ApiOperation("根据订单id查询样品信息")
    @GetMapping("/getSampleInfoByOrderId")
    public Result<?> getSampleInfoByOrderId(@RequestParam Integer id,@RequestParam String sonLaboratory){
        return Result.success(insOrderPlanService.getSampleInfoByOrderId(id,sonLaboratory));
    }
    @ApiOperation("任务展示")
    @GetMapping("/tasksShow")
    public Result<?> tasksShow(Page page,String sonLaboratory){
        return Result.success(insOrderPlanService.tasksShow(page,sonLaboratory));
    }
    @ApiOperation("获取子试验室当月的总检验任务数量")
    @GetMapping("/getCurrentMonthPlanTotalBySonLaboratory")
    public Result<?> getCurrentMonthPlanTotalBySonLaboratory(InsOrderPlanCountDTO insOrderPlanCountDTO){
        return Result.success(insOrderPlanService.getCurrentMonthPlanTotalBySonLaboratory(insOrderPlanCountDTO.getSonLaboratory(),insOrderPlanCountDTO.getStartTime(),insOrderPlanCountDTO.getEndTime()));
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/QueryResultDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * æ£€éªŒä»»åŠ¡-查看结果查询传输对象dto
 */
@Data
public class QueryResultDTO implements Serializable {
    /**
     * æ£€éªŒäºº
     */
    @ApiModelProperty("检验人")
    private String createUser;
    /**
     * å§”托编号
     */
    @ApiModelProperty("委托编号")
    private String entrustCode;
    /**
     * è¡¨å¤´æ•°æ®
     */
    @ApiModelProperty("表头数据")
    private String headerS;
    /**
     * æ—¶é—´èŒƒå›´
     */
    @ApiModelProperty("时间范围")
    private List<String> insTime;
    /**
     * æ ·å“ç¼–号
     */
    @ApiModelProperty("样品编号")
    private String sampleCode;
    /**
     * æ ·å“å¤§ç±»
     */
    @ApiModelProperty("样品大类")
    private String sampleType;
    /**
     * å­è¯•验室
     */
    @ApiModelProperty("子试验室")
    private String sonLaboratory;
}
inspect-server/src/main/java/com/ruoyi/inspect/handler/BasicReportHandler.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/BasicReportHandler.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
@@ -12,7 +12,7 @@
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.require.service.impl.InsOrderPlanServiceImpl;
import com.ruoyi.inspect.service.impl.InsOrderPlanServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
inspect-server/src/main/java/com/ruoyi/inspect/handler/FiberConfigReportHandler.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/FiberConfigReportHandler.java ÐÞ¸Ä
@@ -1,7 +1,8 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.MyUtil;
import com.ruoyi.inspect.dto.SampleProductDto;
@@ -399,7 +400,7 @@
     * @param fiberList å…‰çº¤é¡¹ç›®ä¿¡æ¯
     * @param tables2   å…‰çº¤é™„件表格
     */
    public void writeFiberEnclosureTableRow(List<InsProduct> fiberList, List<Map<String, Object>> tables2,InsReport insReport) {
    public void writeFiberEnclosureTableRow(List<InsProduct> fiberList, List<Map<String, Object>> tables2, InsReport insReport) {
        AtomicInteger index2 = new AtomicInteger(1);//页码
        int colCount = 9;//表格总列数
        int itemCount = 7;//表格项目列数
inspect-server/src/main/java/com/ruoyi/inspect/handler/FiberOpticConnectorLossReportHandler.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/FiberOpticConnectorLossReportHandler.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
inspect-server/src/main/java/com/ruoyi/inspect/handler/FiberOpticRibbonReportHandler.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/FiberOpticRibbonReportHandler.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
@@ -10,8 +10,8 @@
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.vo.InsProductFiberVO;
import org.apache.commons.lang3.StringUtils;
inspect-server/src/main/java/com/ruoyi/inspect/handler/PiperConfigReportHandler.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/PiperConfigReportHandler.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
@@ -6,8 +6,8 @@
import com.ruoyi.framework.util.MyUtil;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.vo.InsProductFiberVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
inspect-server/src/main/java/com/ruoyi/inspect/handler/TemperatureCyclingReportHandler1.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/TemperatureCyclingReportHandler1.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.data.*;
@@ -80,6 +80,7 @@
                ));
                List<String> wendu = new ArrayList<>(wendus.keySet());
                for (int m = 0; m < wendu.size(); m += 3) {
                    int wenduSize = (wendu.size()-m)/3>0?3:(wendu.size()-m);
                    //三个温度一张表,当遍历到第四个温度的时候需要重新建表
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数(光纤色标的数量+8)
@@ -90,7 +91,7 @@
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数(2*光纤项目*3+1)
                        for (int k = 0; k < 6 * nm.size() + 1; k++) {
                        for (int k = 0; k < 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1; k++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
@@ -109,19 +110,67 @@
                            textRenderData.setStyle(style);
                            if (j == 0) {
                                //第一行
                                if (k <= (6L * nm.size() + 1) / 4) {
                                    //第一列
                                    textRenderData.setText("样品编号@Sample number∑1000");
                                } else if (k > (6L * nm.size() + 1) / 4 && k <= (6L * nm.size() + 1) / 2) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode() + "∑998");
                                } else if (k > (6L * nm.size() + 1) / 2 && k < 6L * nm.size()) {
                                    //第三列
                                    textRenderData.setText("规格型号@Type âˆ‘999");
                                } else {
                                    //第四列
                                    textRenderData.setText(sample.getModel());
                                int size = (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)));
                                switch (size){
                                    case 12:
                                        if (k <= 2) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k > 2 && k <= 5) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k > 5 && k < 9) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type âˆ‘999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel()+"∑999888");
                                        }
                                        break;
                                    case 8:
                                        if (k <= 1) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k > 1 && k <= 3) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k > 3 && k < 6) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type âˆ‘999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel()+"∑999888");
                                        }
                                        break;
                                    case 4:
                                        if (k <= 0) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k == 1) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k == 2) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type âˆ‘999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel()+"∑999888");
                                        }
                                        break;
                                }
//                                if (k <= (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 4) {
//                                    //第一列
//                                    textRenderData.setText("样品编号@Sample number∑1000");
//                                } else if (k > (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 4 && k <= (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 2) {
//                                    //第二列
//                                    textRenderData.setText(sample.getSampleCode() + "∑998");
//                                } else if (k > (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 2 && k < 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m))) {
//                                    //第三列
//                                    textRenderData.setText("规格型号@Type âˆ‘999");
//                                } else {
//                                    //第四列
//                                    textRenderData.setText(sample.getModel());
//                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
@@ -152,14 +201,14 @@
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k <= 6L * nm.size() / 3) {
                                } else if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                    textRenderData.setText(wendu.get(m) + "∑52"+j + m);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                    int i1 = m + 1;
                                    String s = "";
                                    try {
@@ -223,10 +272,10 @@
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 1) {
                                    if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("衰减" + "∑42" +j+ k);
                                    } else {
                                        textRenderData.setText(" è¡°å‡ ");
                                        textRenderData.setText("衰减");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
@@ -234,10 +283,10 @@
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("衰减" + "∑42"+j + (k - 1));
                                    } else {
                                        textRenderData.setText("|∆ Î±|");
                                        textRenderData.setText("|∆α|");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
@@ -259,9 +308,9 @@
                                }
                                else if (k % 2 == 0) {
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
@@ -277,8 +326,9 @@
                                        textRenderData.setText("");
                                    } else {
                                        try {
                                            if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")){
                                            if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && wendu.get(m).equals("20℃(常温)")){
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                                .eq(InsProduct::getState,1)
                                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                                .isNotNull(InsProduct::getInsFiberId)
                                                                .eq(InsProduct::getInspectionItem, i + 1)
@@ -295,6 +345,7 @@
                                                textRenderData.setText(max.get() + "∑"+j+ (k-1));
                                            }else {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                                .eq(InsProduct::getState,1)
                                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                                .isNotNull(InsProduct::getInsFiberId)
                                                                .eq(InsProduct::getInspectionItem, i + 1)
@@ -321,9 +372,9 @@
                                }
                                else {
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
@@ -339,6 +390,7 @@
                                        textRenderData.setText("");
                                    } else {
                                        List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState,1)
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInspectionItem, i + 1)
@@ -351,7 +403,7 @@
                                                return splitStr[splitStr.length - 1].split("\"")[1];
                                            }
                                        }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                        if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")){
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize&& wendu.get(m).equals("20℃(常温)")){
                                            textRenderData.setText(max.get() + "∑"+j+ k);
                                        }else {
                                            if (max.isPresent()) {
@@ -372,7 +424,7 @@
                                //倒数第二行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("|∆ Î± max|");
                                    textRenderData.setText("|∆α max|");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
@@ -380,9 +432,9 @@
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 0) {
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
@@ -397,10 +449,11 @@
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && wendu.get(m).equals("20℃(常温)")) {
                                            textRenderData.setText("-" + "∑" + j + (k-1));
                                        } else {
                                            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState,1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
@@ -426,7 +479,7 @@
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("-" + "∑" + j + k);
                                    } else {
                                        textRenderData.setText("-");
@@ -461,9 +514,9 @@
                                } else if (k % 2 == 0) {
                                    //填写衰减差就是last_value
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
@@ -478,13 +531,14 @@
                                        textRenderData.setText("");
                                    } else {
                                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState,1)
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId())
                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())));
                                        if (k <= 6L * nm.size() / 3 && s.equals("20℃(常温)")) {
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && s.equals("20℃(常温)")) {
                                            String comValue = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                                            .eq(InsProductResult::getInsProductId, insProducts.get(0).getId()))
                                                    .getComValue();
@@ -502,9 +556,9 @@
                                } else {
                                    //填写其余正常温度的衰减(result表里面的com_value)
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize&& k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
@@ -519,6 +573,7 @@
                                        textRenderData.setText("");
                                    } else {
                                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState,1)
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId())
@@ -529,7 +584,7 @@
                                                        .eq(InsProductResult::getInsProductId, insProducts.get(0).getId()))
                                                .getComValue();
                                        String[] splitStr = comValue.split(":");
                                        if (k <= 6L * nm.size() / 3 && s.equals("20℃(常温)")) {
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && s.equals("20℃(常温)")) {
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1] + "∑" + j + k);
                                        } else {
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1]);
@@ -557,8 +612,16 @@
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    if(m==0 && countSize==13){
                        tableStyle.setWidth("10000");
                        tableStyle.setColWidths(new int[]{1580,850,0,850,0,840,840,840,840,840,840,840,840});
                    }else if(countSize==13){
                        tableStyle.setWidth("10000");
                        tableStyle.setColWidths(new int[]{1220,735,745,735,745,735,745,735,745,735,745,735,745});
                    }else{
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    }
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
inspect-server/src/main/java/com/ruoyi/inspect/handler/TemperatureTestReportHandler.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/TemperatureTestReportHandler.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
@@ -34,7 +35,7 @@
    private final InsProductResultMapper insProductResultMapper;
    public TemperatureTestReportHandler(InsProductMapper insProductMapper, InsProductResultMapper insProductResultMapper){
    public TemperatureTestReportHandler(InsProductMapper insProductMapper,InsProductResultMapper insProductResultMapper){
        this.insProductMapper = insProductMapper;
        this.insProductResultMapper = insProductResultMapper;
    }
@@ -325,7 +326,7 @@
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (rowRenderData.getCells().size() != 0) {
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
@@ -333,10 +334,6 @@
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等5");
                        }
inspect-server/src/main/java/com/ruoyi/inspect/handler/ThermalCycleReportHandler.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/handler/ThermalCycleReportHandler.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.handler;
package com.ruoyi.inspect.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -35,7 +35,7 @@
    private final InsProductResultMapper insProductResultMapper;
    public ThermalCycleReportHandler(InsProductMapper insProductMapper, InsProductResultMapper insProductResultMapper){
    public ThermalCycleReportHandler(InsProductMapper insProductMapper,InsProductResultMapper insProductResultMapper){
        this.insProductMapper = insProductMapper;
        this.insProductResultMapper = insProductResultMapper;
    }
@@ -66,7 +66,8 @@
                        .eq(InsProduct::getInspectionItemClass, "直流电阻")
                        .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                        .eq(InsProduct::getInspectionItem, i + ""));
                InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0);
                InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
                        .eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0);
                vCount += StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\"");
                list.add(StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\""));
            }
@@ -556,7 +557,7 @@
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (rowRenderData.getCells().size() != 0) {
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
@@ -564,10 +565,6 @@
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等5");
                        }
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java
@@ -30,15 +30,15 @@
    int updateInspected(@Param("id") Integer id);
    List<InsProduct> selectFiberInsProduct(List<Integer> ids, String laboratory);
    List<InsProduct> selectFiberInsProduct(@Param("ids")List<Integer> ids, @Param("laboratory")String laboratory);
    IPage<InsProduct> selectNoProducts(Page page, Integer orderId);
    int selectInsProductCountByOrderId(Integer orderId);
    List<InsProduct> findSagTemperatureProducts(Integer sampleId, String inspectionItem);
    List<InsProduct> findSagTemperatureProducts(@Param("sampleId")Integer sampleId, @Param("inspectionItem")String inspectionItem);
    List<InsProductVO> selectProductByOrderId(Integer orderId,String sonLaboratory);
    List<InsProductVO> selectProductByOrderId(@Param("orderId") Integer orderId,@Param("sonLaboratory")String sonLaboratory);
    List<InsProductFiberVO> selectInsProductInsFiberList(Integer sampleId);
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.InsOrderFile;
/**
 * <p>
 * æ£€éªŒå•下的附件列表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-06-06 10:08:21
 */
public interface InsOrderFileService extends IService<InsOrderFile> {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderPlanService.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/service/InsOrderPlanService.java ÐÞ¸Ä
@@ -1,17 +1,13 @@
package com.ruoyi.require.service;
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.inspect.dto.InsOrderPlanDTO;
import com.ruoyi.inspect.dto.InsProductResultDTO;
import com.ruoyi.inspect.dto.TasksShowDto;
import com.ruoyi.inspect.dto.UnInsProductsDTO;
import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.pojo.InsOrderFile;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
import com.ruoyi.inspect.vo.InsOrderPlanVO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
@@ -23,9 +19,9 @@
 */
public interface InsOrderPlanService {
    void exportInsOrderPlanResult(Map<String, Object> data, HttpServletResponse response);
    void exportInsOrderPlanResult(QueryResultDTO data, HttpServletResponse response);
    List<Map<String,Object>> getInsOrderPlanList(Map<String,Object> data);
    List<Map<String,Object>> getInsOrderPlanList(QueryResultDTO queryResultDTO);
    void exportCommissionFees(Map<String, Object> data,HttpServletResponse response);
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.inspect.mapper.InsOrderFileMapper;
import com.ruoyi.inspect.pojo.InsOrderFile;
import com.ruoyi.inspect.service.InsOrderFileService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * æ£€éªŒå•下的附件列表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-06-06 10:08:21
 */
@Service
public class InsOrderFileServiceImpl extends ServiceImpl<InsOrderFileMapper, InsOrderFile> implements InsOrderFileService {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/service/impl/InsOrderPlanServiceImpl.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.service.impl;
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.UUID;
@@ -37,37 +37,32 @@
import com.ruoyi.basic.mapper.StandardProductListMapper;
import com.ruoyi.basic.service.StandardTemplateService;
import com.ruoyi.basic.vo.StandardProductVO;
import com.ruoyi.common.constant.ExchangeConstants;
import com.ruoyi.common.constant.RouterKeyConstants;
import com.ruoyi.common.core.domain.entity.Custom;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.MatrixToImageWriter;
import com.ruoyi.framework.util.RedisUtil;
import com.ruoyi.framework.util.SheetWriteHandlerUtil;
import com.ruoyi.inspect.amqp.constants.ExchangeConstants;
import com.ruoyi.inspect.amqp.constants.RouterKeyConstants;
import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.handler.*;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.service.InsBushingService;
import com.ruoyi.inspect.service.InsOrderPlanService;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsUnPassService;
import com.ruoyi.inspect.service.impl.InsOrderServiceImpl;
import com.ruoyi.framework.util.SheetWriteHandlerUtil;
import com.ruoyi.inspect.service.impl.InsReportServiceImpl;
import com.ruoyi.inspect.vo.*;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.mapper.PerformanceShiftMapper;
import com.ruoyi.performance.mapper.ShiftTimeMapper;
import com.ruoyi.require.handler.*;
import com.ruoyi.require.pojo.InformationNotification;
import com.ruoyi.require.service.InformationNotificationService;
import com.ruoyi.require.service.InsOrderPlanService;
import com.ruoyi.notice.pojo.InformationNotification;
import com.ruoyi.notice.service.InformationNotificationService;
import com.ruoyi.system.mapper.CustomMapper;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.ISysDictTypeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
@@ -126,6 +121,7 @@
    private InsSampleMapper insSampleMapper;
    @Resource
    private InsSampleUserMapper insSampleUserMapper;
    @Resource
    private InsOrderMapper insOrderMapper;
    @Resource
@@ -140,10 +136,6 @@
    private InsOrderStateMapper insOrderStateMapper;
    @Resource
    private InsProductMapper insProductMapper;
    @Resource
    private ShiftTimeMapper shiftTimeMapper;
    @Resource
    private PerformanceShiftMapper performanceShiftMapper;
    @Resource
    private StandardProductListMapper standardProductListMapper;
@@ -167,7 +159,7 @@
    private InsUnPassService insUnPassService;
    @Resource
    AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    private ISysDictTypeService dictTypeService;
    @Resource
    private InformationNotificationService informationNotificationService;
@@ -202,24 +194,18 @@
    @Autowired
    private RabbitTemplate rabbitTemplate;
    private ReentrantLock lock = new ReentrantLock();
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Override
    public void exportInsOrderPlanResult(Map<String, Object> data, HttpServletResponse response) {
    public void exportInsOrderPlanResult(QueryResultDTO data, HttpServletResponse response) {
        List<Map<String,Object>> dataList = new ArrayList<>();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Object o = getTabHeader(data.get("sonLaboratory").toString(), data.get("samples").toString()).get("tableHeader");// èŽ·å–åŠ¨æ€è¡¨å¤´
            Object o = getTabHeader(data.getSonLaboratory(), data.getSampleType()).get("tableHeader");// èŽ·å–åŠ¨æ€è¡¨å¤´
            List<Map<String, Object>>  tableHeader = objectMapper.readValue(JSONUtil.toJsonStr(o), new TypeReference<List<Map<String, Object>>>() {
            });// è¡¨å¤´æ•°æ®
            Map<String, Object> table = objectMapper.readValue(JSONUtil.toJsonStr(data.get("trendsTable")), new TypeReference<Map<String, Object>>() {
            });
            List<Map<String, Object>> trendsTable = getInsOrderPlanList(table); // è¡¨æ ¼æ•°æ®
            // è¡¨å¤´æ•°æ®
            List<Map<String, Object>> trendsTable = getInsOrderPlanList(data); // è¡¨æ ¼æ•°æ®
            for (Map<String, Object> trend : trendsTable) {
                Map<String, Object> addMap = new HashMap<>();
                addMap.put("委托单号", trend.get("entrustCode"));
@@ -250,7 +236,7 @@
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .registerWriteHandler(new SheetWriteHandlerUtil(data.get("samples").toString(),head.size()))
                    .registerWriteHandler(new SheetWriteHandlerUtil(data.getSampleType(),head.size()))
                    .useDefaultStyle(true).relativeHeadRowIndex(1)
                    .registerWriteHandler(horizontalCellStyleStrategy)
                    .build();
@@ -346,29 +332,28 @@
        return headWriteCellStyle;
    }
    @Override
    public List<Map<String, Object>> getInsOrderPlanList(Map<String,Object> data) {
        String sampleType = data.get("sampleType").toString();
        String sonLaboratory = data.get("sonLaboratory").toString();
        String entrustCode = data.get("entrustCode").toString();
    public List<Map<String, Object>> getInsOrderPlanList(QueryResultDTO data) {
        String sampleType = data.getSampleType();
        String sonLaboratory = data.getSonLaboratory();
        String entrustCode = data.getEntrustCode();
        Integer createUser = null;
        String name = "";
        if(StringUtils.isNotBlank(data.get("createUser").toString())) {
             createUser = Integer.parseInt(data.get("createUser").toString());
        if(StringUtils.isNotBlank(data.getCreateUser())) {
             createUser = Integer.parseInt(data.getCreateUser());
             name = userMapper.selectById(createUser).getName();
        }
        String sampleCode = data.get("sampleCode").toString();
        String sampleCode = data.getSampleCode();
        String startTime = "";
        String endTime = "";
        List<Map<String, Object>> maps = new ArrayList<>();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if(StringUtils.isNotBlank(data.get("insTime").toString()) && !Objects.isNull(data.get("insTime"))) {
                List insTime = objectMapper.readValue(JSONUtil.toJsonStr(data.get("insTime")), List.class);
                startTime = insTime.get(0).toString();
                endTime = insTime.get(1).toString();
            if(CollectionUtils.isNotEmpty(data.getInsTime())) {
                startTime = data.getInsTime().get(0);
                endTime = data.getInsTime().get(1);
            }
            // è¡¨å¤´ä¿¡æ¯
            List<Map<String, Object>> headerS = objectMapper.readValue(JSONUtil.toJsonStr(data.get("headerS")), new TypeReference<List<Map<String, Object>>>() {
            List<Map<String, Object>> headerS = objectMapper.readValue(JSONUtil.toJsonStr(data.getHeaderS()), new TypeReference<List<Map<String, Object>>>() {
            });
            // åˆ¤æ–­æ˜¯å¦æ˜¯æ¸©åº¦å¾ªçޝ
            if(sampleType.equals("温度循环")) {
@@ -446,8 +431,7 @@
     */
    private String getCurrentUserLaboratory(){
        // èŽ·å–å½“å‰äººæ‰€åœ¨å®žéªŒå®¤
        Integer userId = SecurityUtils.getUserId().intValue();
        String departLimsId = userMapper.selectById(userId).getDepartLimsId();
        String departLimsId = userMapper.selectById(SecurityUtils.getUserId()).getDepartLimsId();
        String laboratory = "";
        if(StringUtils.isNotBlank(departLimsId)) {
            String[] split = departLimsId.split(",");
@@ -619,7 +603,7 @@
            }
        }
        if (samples.contains("温度循环")){
        if (Objects.nonNull(samples)&&samples.contains("温度循环")){
            addElementToMaps(maps, "循环次数", "inspectionItems");
            addElementToMaps(maps, "温度点", "inspectionItemSubclass");
            addElementToMaps(maps, "衰减系数1310", "attenuationCoefficient1310");
@@ -663,6 +647,7 @@
    @Override
    public IPage<InsOrderPlanVO> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
        User user = userMapper.selectById(SecurityUtils.getUserId());//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
@@ -685,8 +670,7 @@
            }
            insOrderPlanDTO.setUserId(null);
        }
        InsOrderPlanDTO planDTO = new InsOrderPlanDTO();
        QueryWrapper<InsOrderPlanDTO> wrappers = QueryWrappers.queryWrappers(planDTO);
        QueryWrapper<InsOrderPlanDTO> wrappers = QueryWrappers.queryWrappers(new InsOrderPlanDTO());
        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(
                page,
                userName,
@@ -705,8 +689,7 @@
    @Override
    public IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);//当前登录的人
        User user = userMapper.selectById(SecurityUtils.getUserId());//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
@@ -720,11 +703,10 @@
            }
        }
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
            insOrderPlanDTO.setUserId(userId.longValue());
            insOrderPlanDTO.setUserId(Long.valueOf(user.getId()));
        }
        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室
        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId, sonLaboratory, laboratory);
        return insOrderPage;
        return insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), user.getId(), sonLaboratory, laboratory);
    }
    //认领任务
@@ -740,8 +722,6 @@
    @Override
    public Map<String, Object> doInsOrder(Integer id, String laboratory) {
//        InsOrder insOrder = new InsOrder();
//        insOrder.setId(id);
        InsOrder order = insOrderMapper.selectById(id);
        InsOrderState insOrderState = insOrderStateMapper.selectOne(new LambdaQueryWrapper<InsOrderState>()
@@ -859,8 +839,7 @@
    public IPage<InsOrderFile> getFileList(Page page, InsOrderFile insOrderFile) {
        Integer insOrderId = insOrderFile.getInsOrderId();
        insOrderFile.setInsOrderId(null);
        IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile),insOrderId);
        return insOrderFileIPage;
        return insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile),insOrderId);
    }
    @Override
@@ -2088,9 +2067,10 @@
                    .and(i->i.isNull(InsProduct::getInspectionItemClass).or().eq(InsProduct::getInspectionItemClass,""))
                    );//用检验分项字段区别光纤配置与温度循环
            //查询全色谱,过滤色标并排序
            List<String> colorList = DictUtils.getDictCache("色标").stream()
            List<String> colorList = dictTypeService.selectDictDataByType("fiber_color_type").stream()
                    .sorted(Comparator.comparing(SysDictData::getDictSort))
                    .map(SysDictData::getDictValue)
                    .map(SysDictData::getDictLabel)
                    .collect(Collectors.toList());
            //松套管附件处理
            long piperCount = insProducts.stream().filter(f->!Objects.isNull(f.getInsBushId())).count();
inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java
ÎļþÒÑɾ³ý
notice-server/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.ruoyi</groupId>
        <artifactId>ruoyi</artifactId>
        <version>3.8.9</version>
    </parent>
    <groupId>com.ruoyi</groupId>
    <artifactId>notice-server</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
    </dependencies>
</project>
notice-server/src/main/java/com/ruoyi/notice/dto/InformationNotificationDto.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/dto/InformationNotificationDto.java ÐÞ¸Ä
@@ -1,6 +1,6 @@
package com.ruoyi.require.dto;
package com.ruoyi.notice.dto;
import com.ruoyi.require.pojo.InformationNotification;
import com.ruoyi.notice.pojo.InformationNotification;
import lombok.Data;
@Data
notice-server/src/main/java/com/ruoyi/notice/mapper/InformationNotificationMapper.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/mapper/InformationNotificationMapper.java ÐÞ¸Ä
@@ -1,10 +1,11 @@
package com.ruoyi.require.mapper;
package com.ruoyi.notice.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.InformationNotificationDto;
import com.ruoyi.require.pojo.InformationNotification;
import com.ruoyi.notice.dto.InformationNotificationDto;
import com.ruoyi.notice.pojo.InformationNotification;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
@@ -14,6 +15,7 @@
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-04-23 02:14:30
 */
@Mapper
public interface InformationNotificationMapper extends BaseMapper<InformationNotification> {
    IPage<InformationNotificationDto> getPage(Page page, String messageType, Integer userId);
notice-server/src/main/java/com/ruoyi/notice/pojo/InformationNotification.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/pojo/InformationNotification.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.require.pojo;
package com.ruoyi.notice.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
notice-server/src/main/java/com/ruoyi/notice/service/InformationNotificationService.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/service/InformationNotificationService.java ÐÞ¸Ä
@@ -1,10 +1,10 @@
package com.ruoyi.require.service;
package com.ruoyi.notice.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.InformationNotificationDto;
import com.ruoyi.require.pojo.InformationNotification;
import com.ruoyi.notice.dto.InformationNotificationDto;
import com.ruoyi.notice.pojo.InformationNotification;
import java.util.Map;
notice-server/src/main/java/com/ruoyi/notice/service/impl/InformationNotificationServiceImpl.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/service/impl/InformationNotificationServiceImpl.java ÐÞ¸Ä
@@ -1,14 +1,14 @@
package com.ruoyi.require.service.impl;
package com.ruoyi.notice.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.require.dto.InformationNotificationDto;
import com.ruoyi.require.mapper.InformationNotificationMapper;
import com.ruoyi.require.pojo.InformationNotification;
import com.ruoyi.require.service.InformationNotificationService;
import com.ruoyi.notice.dto.InformationNotificationDto;
import com.ruoyi.notice.mapper.InformationNotificationMapper;
import com.ruoyi.notice.pojo.InformationNotification;
import com.ruoyi.notice.service.InformationNotificationService;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
notice-server/src/main/resources/mapper/InformationNotificationMapper.xml
ÎļþÃû´Ó cnas-require/src/main/resources/mapper/InformationNotificationMapper.xml ÐÞ¸Ä
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.require.mapper.InformationNotificationMapper">
<mapper namespace="com.ruoyi.notice.mapper.InformationNotificationMapper">
    <select id="getPage" resultType="com.ruoyi.require.dto.InformationNotificationDto">
    <select id="getPage" resultType="com.ruoyi.notice.dto.InformationNotificationDto">
        select i.*, u.name senderUser, u2.name consigneeUser
        from information_notification i
                 left join user u on i.sender_id = u.id
pom.xml
@@ -268,6 +268,13 @@
                <version>${ruoyi.version}</version>
            </dependency>
            <!--信息通知-->
            <dependency>
                <groupId>com.ruoyi</groupId>
                <artifactId>notice-server</artifactId>
                <version>${ruoyi.version}</version>
            </dependency>
            <!--cnas设备管理-->
            <dependency>
                <groupId>com.ruoyi</groupId>
@@ -399,6 +406,7 @@
        <module>cnas-require</module>
        <module>cnas_server</module>
        <module>cnas-personnel</module>
        <module>notice-server</module>
    </modules>
    <packaging>pom</packaging>
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
@@ -54,5 +54,6 @@
    List<Map<String,Object>> getPersonList(String laboratory);
    List<Map<String, Object>> getLaboratoryPersonList(String laboratory);
}
ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
@@ -120,7 +120,7 @@
        FIND_IN_SET(dl.id,u.depart_lims_id)
        where
        dl.name in('通信产品实验室','电力产品实验室','检测办')
        and u.status = 1
        and u.state = 1
        and u.is_custom = 0
        <if test="laboratory!='' and laboratory!=null">
            and (dl.name = #{laboratory} or dl.name='检测办')