zhuo
2024-07-23 5ed5f51d479989d5b2149b09c82b6b3ea495b589
Merge remote-tracking branch 'origin/master'
已修改24个文件
已添加1个文件
495 ■■■■ 文件已修改
cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/resources/mapper/DataConfigMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/resources/mapper/DeviceMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsSampleMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsSampleUser.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleMapper.xml 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
@@ -26,9 +26,11 @@
import java.io.File;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * è®¾å¤‡(DeviceController)表控制层
@@ -190,26 +192,55 @@
    @ValueClassify("设备")
    @ApiOperation(value = "维护数采配置")
    @PostMapping("/saveDataAcquisitionConfiguration")
    public Result<?> saveDataAcquisitionConfiguration(@RequestBody DataConfigDto dataConfigList) {
        dataConfigService.saveOrUpdateBatch(dataConfigList.getDataConfigList());
    public Result<?> saveDataAcquisitionConfiguration(@RequestParam(value = "deviceId") Integer deviceId, @RequestBody DataConfigDto dataConfigList) {
        if (dataConfigList.getIsDevice()) {
            System.out.println();
            Device device = new Device();
            device.setId(deviceId);
            device.setCollectUrl(dataConfigList.getCollectUrl());
            device.setStorageUrl(dataConfigList.getStorageUrl());
            device.setIp(dataConfigList.getIp());
            device.setFileType(dataConfigList.getFileType());
            deviceService.updateById(device);
        } else {
            dataConfigService.saveOrUpdateBatch(dataConfigList.getDataConfigList());
        }
        return Result.success();
    }
//    @ValueClassify("设备")
//    @ApiOperation(value = "查询数采配置")
//    @GetMapping("/queryDataAcquisitionConfiguration")
//    public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId, @RequestParam("insProductItem") String insProductItem) {
//        List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
//                .eq(DataConfig::getDeviceId, deviceId)
//                .eq(DataConfig::getInsProductItem, insProductItem));
//        return Result.success(list);
//    }
    @ValueClassify("设备")
    @ApiOperation(value = "查询数采配置")
    @GetMapping("/queryDataAcquisitionConfiguration")
    public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId, @RequestParam("insProductItem") String insProductItem) {
        List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
    public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId,
                                                       @RequestParam("isDevice") Boolean isDevice,
                                                       @RequestParam(value = "insProductItem", required = false) String insProductItem) {
        if (isDevice) {
            List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
                .eq(DataConfig::getDeviceId, deviceId)
                .eq(DataConfig::getInsProductItem, insProductItem));
        return Result.success(list);
            return Result.success(list);
        } else {
            return Result.success(dataConfigService.selectDataConfigList(deviceId));
        }
    }
    @ValueClassify("设备")
    @ApiOperation(value = "删除数采配置")
    @DeleteMapping("/deleteDataAcquisitionConfiguration")
    public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("id") Integer id) {
        dataConfigService.removeById(id);
    public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) {
        List<String> split = Arrays.asList(ids.split(","));
        List<String> collect = split.stream().distinct().collect(Collectors.toList());
        dataConfigService.removeBatchByIds(collect);
        return Result.success();
    }
}
cnas-server/src/main/java/com/yuanchu/mom/dto/DataConfigDto.java
@@ -1,6 +1,7 @@
package com.yuanchu.mom.dto;
import com.yuanchu.mom.pojo.DataConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@@ -9,4 +10,18 @@
public class DataConfigDto {
    private List<DataConfig> dataConfigList;
    private Boolean isDevice;
    @ApiModelProperty("文件后缀")
    private String fileType;
    @ApiModelProperty("采集地址")
    private String collectUrl;
    @ApiModelProperty("存储地址")
    private String storageUrl;
    @ApiModelProperty("设备IP")
    private String ip;
}
cnas-server/src/main/java/com/yuanchu/mom/dto/DeviceConfigDtoPage.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.yuanchu.mom.dto;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.yuanchu.mom.annotation.ValueTableShow;
import com.yuanchu.mom.common.OrderBy;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DeviceConfigDtoPage extends OrderBy {
    @ValueTableShow(2)
    @ApiModelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ValueTableShow(3)
    @ApiModelProperty(value = "文件后缀")
    private String fileType;
    @ValueTableShow(4)
    @ApiModelProperty(value = "采集地址")
    private String collectUrl;
    @ValueTableShow(5)
    @ApiModelProperty(value = "存储地址")
    private String storageUrl;
    @ValueTableShow(6)
    @ApiModelProperty(value = "IP地址")
    private String ip;
    @ValueTableShow(7)
    @ApiModelProperty(value = "检验项")
    private String inspectionItem;
    @ValueTableShow(8)
    @ApiModelProperty(value = "检验项子项")
    private String inspectionItemSubClass;
    @ValueTableShow(9)
    @ApiModelProperty(value = "公式")
    private String formula;
    @ValueTableShow(10)
    @ApiModelProperty(value = "参照X")
    private String referx;
    @ValueTableShow(11)
    @ApiModelProperty(value = "X")
    private String x;
    @ValueTableShow(12)
    @ApiModelProperty(value = "参照Y")
    private String refery;
    @ValueTableShow(13)
    @ApiModelProperty(value = "Y")
    private String y;
    private Integer id;
}
cnas-server/src/main/java/com/yuanchu/mom/mapper/DataConfigMapper.java
@@ -1,7 +1,10 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.DataConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.dto.DeviceConfigDtoPage;
import com.yuanchu.mom.pojo.DataConfig;
import java.util.List;
/**
 * <p>
@@ -13,4 +16,5 @@
 */
public interface DataConfigMapper extends BaseMapper<DataConfig> {
    List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
}
cnas-server/src/main/java/com/yuanchu/mom/service/DataConfigService.java
@@ -1,7 +1,10 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.DataConfig;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.dto.DeviceConfigDtoPage;
import com.yuanchu.mom.pojo.DataConfig;
import java.util.List;
/**
 * <p>
@@ -13,4 +16,5 @@
 */
public interface DataConfigService extends IService<DataConfig> {
    List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
}
cnas-server/src/main/java/com/yuanchu/mom/service/impl/DataConfigServiceImpl.java
@@ -1,10 +1,15 @@
package com.yuanchu.mom.service.impl;
import com.yuanchu.mom.pojo.DataConfig;
import com.yuanchu.mom.mapper.DataConfigMapper;
import com.yuanchu.mom.service.DataConfigService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.dto.DeviceConfigDtoPage;
import com.yuanchu.mom.mapper.DataConfigMapper;
import com.yuanchu.mom.pojo.DataConfig;
import com.yuanchu.mom.service.DataConfigService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -15,6 +20,14 @@
 * @since 2024-07-13 12:23:00
 */
@Service
@AllArgsConstructor
public class DataConfigServiceImpl extends ServiceImpl<DataConfigMapper, DataConfig> implements DataConfigService {
    private GetLook getLook;
    private DataConfigMapper dataConfigMapper;
    @Override
    public List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId) {
        return dataConfigMapper.selectDataConfigList(deviceId);
    }
}
cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
@@ -138,7 +138,7 @@
    public Result<?> dataAcquisition(HttpServletRequest request, Integer id, String entrustCode, String sampleCode) {
        String ipAddress = request.getRemoteAddr();
        // é˜²æ­¢å›žçŽ¯åœ°å€å˜ä¸ºIPv6
        String ip = ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress;
        String ip =  ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress;
        List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
                .eq(Device::getIp, ip));
        if (ObjectUtils.isEmpty(device)) {
@@ -156,6 +156,8 @@
                    .orderBy(false, false, DataConfig::getId));
            hashMap.putAll(DataAcquisition.dataAcquisitionEntrance(request, list, i, entrustCode, sampleCode, ip));
        });
        String frequency = DataAcquisition.createFrequency(entrustCode, sampleCode);
        hashMap.put("frequency", frequency);
        return Result.success(hashMap);
    }
}
cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java
@@ -84,10 +84,10 @@
            }
            // å¦‚果存在存储地址,则移动地址
            if (ObjectUtils.isNotEmpty(device.getStorageUrl())) {
                String s = HTTP + ip + MOVEFILE + "?startFilePath=" + device.getCollectUrl() + "&endFilePath=" + device.getStorageUrl();
                String s = HTTP + ip + MOVEFILE + "?startFilePath=" + device.getCollectUrl() + "&endFilePath=" + device.getStorageUrl() + "&fileType=" + device.getFileType();
                String storageUrlResult = HttpUtil.get(s);
                JSONObject storageUrlResultJson = JSON.parseObject(storageUrlResult);
                if (Objects.equals(storageUrlResultJson.get("code"), 1)) {
                if (Objects.equals(storageUrlResultJson.get("code"), 0)) {
                    if (ObjectUtils.isEmpty(storageUrlResultJson.get("msg"))) {
                        throw new ErrorException("存储地址错误,可能文件路径配置错误!");
                    } else {
@@ -95,13 +95,11 @@
                    }
                }
            }
            String frequency = createFrequency(entrustCode, sampleCode);
            map.put("frequency", frequency);
            return map;
        }
    }
    private static String createFrequency(String entrustCode, String sampleCode) {
    public static String createFrequency(String entrustCode, String sampleCode) {
        String key = frequency + ":" + entrustCode + ":" + sampleCode;
        boolean b = RedisUtil.hasKey(key);
        String frequencyValue;
@@ -142,7 +140,16 @@
                JSONObject jsonObject1 = JSON.parseObject(dataList.get(y).toString());
                Object o = jsonObject1.get(key);
                if (ObjectUtils.isNotEmpty(o)) {
                    list.add(o);
                    // å°æ•°ç‚¹è¿›ä¸‰ä½
                    double v1 = 0;
                    try {
                        v1 = Double.parseDouble(o.toString());
                        double v2 = v1 / 1000;
                        list.add(v2);
                    } catch (NumberFormatException e) {
                        list.add(o);
                    }
                }
            }
            // è¿›è¡Œå…¬å¼è®¡ç®—
cnas-server/src/main/resources/mapper/DataConfigMapper.xml
@@ -12,4 +12,27 @@
        <result column="y" property="y" />
    </resultMap>
    <select id="selectDataConfigList" resultType="com.yuanchu.mom.dto.DeviceConfigDtoPage">
        SELECT d.device_name,
               d.file_type,
               d.collect_url,
               d.storage_url,
               d.ip,
               ip.inspection_item,
               if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '',
                  ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass,
               ddc.formula,
               ddc.referx,
               ddc.refery,
               ddc.x,
               ddc.y,
               ddc.id
        FROM device d
                 left join structure_item_parameter ip on FIND_IN_SET(ip.id, d.ins_product_ids)
                 left join device_data_config ddc on ddc.device_id = d.id and
                                                     if(ip.inspection_item_subclass is not null and
                                                        ip.inspection_item_subclass != '', ip.inspection_item_subclass,
                                                        ip.inspection_item) = ddc.ins_product_item
        where d.id = #{deviceId}
    </select>
</mapper>
cnas-server/src/main/resources/mapper/DeviceMapper.xml
@@ -119,7 +119,8 @@
    </select>
    <select id="getInspectionItemSubclass" resultType="java.lang.String">
        SELECT ip.inspection_item_subclass FROM ins_product ip
        SELECT if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '',
                  ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass FROM ins_product ip
        where ip.ins_sample_id = #{id}
    </select>
</mapper>
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java
@@ -62,8 +62,8 @@
    @ValueClassify("检验下单")
    @ApiOperation(value = "检验分配")
    @PostMapping("/upInsOrder")
    public Result<?> upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId) {
        return Result.success(insOrderService.upInsOrder(orderId, sampleId, appointed, userId));
    public Result<?> upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId,String sonLaboratory) {
        return Result.success(insOrderService.upInsOrder(orderId, sampleId, appointed, userId,sonLaboratory));
    }
    @ValueClassify("检验下单")
    @ApiOperation(value = "添加检验下单数据")
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderPlanController.java
@@ -87,8 +87,8 @@
    @ValueClassify("检验任务")
    @ApiOperation(value = "任务交接")
    @PostMapping("/upPlanUser")
    public Result<?> upPlanUser(Integer userId, Integer orderId) {
        return Result.success(insOrderPlanService.upPlanUser(userId, orderId));
    public Result<?> upPlanUser(Integer userId, Integer orderId,String sonLaboratory) {
        return Result.success(insOrderPlanService.upPlanUser(userId, orderId, sonLaboratory));
    }
    @ValueClassify("检验任务")
@@ -113,6 +113,13 @@
        return num == 1 ? Result.success() : Result.fail("提交失败,部分项目还未进行检验");
    }
    @ValueClassify("检验任务")
    @ApiOperation(value = "是否允许修改采集值")
    @DeleteMapping("/isItAllowedToModifyTheCollectedValues")
    public Result<?> isItAllowedToModifyTheCollectedValues() {
        return Result.success();
    }
    @ApiOperation(value = "保存检验内容")
    @PostMapping("/saveInsContext")
    @ValueAuth
inspect-server/src/main/java/com/yuanchu/mom/mapper/InsSampleMapper.java
@@ -25,9 +25,9 @@
*/
public interface InsSampleMapper extends BaseMapper<InsSample> {
    IPage<InsOrderPlanVO> findInsSampleAndOrder(Page page, QueryWrapper<InsOrderPlanDTO> ew, Integer userId);
    IPage<InsOrderPlanVO> findInsSampleAndOrder(Page page, QueryWrapper<InsOrderPlanDTO> ew, Integer userId,String sonLaboratory);
    IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, QueryWrapper<InsOrderPlanDTO> ew, Integer userId);
    IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, QueryWrapper<InsOrderPlanDTO> ew, Integer userId,String sonLaboratory);
    List<SampleProductDto> selectSampleProductListByOrderId(Integer id);
inspect-server/src/main/java/com/yuanchu/mom/pojo/InsSampleUser.java
@@ -10,6 +10,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.formula.functions.T;
/**
 * æ ·å“è´Ÿè´£äººè®°å½•
@@ -57,9 +58,18 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    public InsSampleUser(Integer insSampleId, Integer userId, Integer state) {
    /**
     * å­è¯•验室
     * @param insSampleId
     * @param userId
     * @param state
     */
    private String sonLaboratory;
    public InsSampleUser(Integer insSampleId, Integer userId, Integer state,String sonLaboratory) {
        this.insSampleId = insSampleId;
        this.userId = userId;
        this.state = state;
        this.sonLaboratory = sonLaboratory;
    }
}
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderPlanService.java
@@ -23,7 +23,7 @@
    Map<String, Object> doInsOrder(Integer id, String laboratory);
    int upPlanUser(Integer userId, Integer orderId);
    int upPlanUser(Integer userId, Integer orderId,String sonLaboratory);
    int verifyPlan(Integer orderId, String laboratory, Integer type, String tell);
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderService.java
@@ -23,7 +23,7 @@
    Map<String, Object> selectInsOrderParameter(IPage<InsOrder> page, SampleOrderDto sampleOrderDto);
    //修改检验下单数据
    int upInsOrder(Integer orderId,Integer sampleId, String appointed, Integer userId);
    int upInsOrder(Integer orderId,Integer sampleId, String appointed, Integer userId,String sonLaboratory);
    int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing);
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -143,7 +143,8 @@
             userId = map1.get("userId");
            insOrderPlanDTO.setUserId(userId.longValue());
        }
        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室
        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId,sonLaboratory);
        map.put("body", insOrderPage);
        return map;
    }
@@ -157,11 +158,13 @@
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
            insOrderPlanDTO.setUserId(userId.longValue());
        }
        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId);
        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室
        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId,sonLaboratory);
        map.put("body", insOrderPage);
        return map;
    }
    //认领任务
    @Override
    public boolean claimInsOrderPlan(InsOrderPlanDTO entity) {
        if (Objects.isNull(entity)) {
@@ -169,7 +172,7 @@
        }
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
        Integer userId = map1.get("userId");
        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 1);
        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 1,entity.getSonLaboratory());
        return insSampleUserMapper.insert(insSampleUser) > 0;
    }
@@ -418,7 +421,7 @@
            productVos = productVos.stream().sorted(Comparator.comparing(productVo -> productVo.getInsProduct().getInspectionItemClass())).collect(Collectors.toList());
        }
        else {
            //电力--热循环
            //电力--热循环和温升试验
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getInsSampleId, sampleId)
                    .eq(InsProduct::getInspectionItem, inspectionItem));
@@ -545,7 +548,7 @@
                        .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, insProduct.getInspectionItemSubclass())
                        .eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode()));
                if (count == 0 && ObjectUtils.isNotEmpty(insProduct.getManHour())) {
                    //添加每个人的产量工时
                    //添加每个人的产量工时,要判断当前时间是否是这个人的排班时间,如果不是则是加班
                    AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
                    auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//检测父项
                    auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//检测子项
@@ -608,12 +611,14 @@
        });
    }
    //交接
    @Override
    public int upPlanUser(Integer userId, Integer orderId) {
    public int upPlanUser(Integer userId, Integer orderId,String sonLaboratory) {
        InsSampleUser insSampleUser = new InsSampleUser();
        insSampleUser.setUserId(userId);
        insSampleUser.setInsSampleId(orderId);
        insSampleUser.setState(0);
        insSampleUser.setSonLaboratory(sonLaboratory);
        return insSampleUserMapper.insert(insSampleUser);
    }
@@ -3455,7 +3460,13 @@
        info.setViewStatus(false);
        info.setJumpPath("b1-inspect-order-plan");
        informationNotificationService.addInformationNotification(info);
        upPlanUser(verifyUser, orderId);
        //复核人--检验单相关负责人
        InsSampleUser insSampleUser = new InsSampleUser();
        insSampleUser.setUserId(verifyUser);
        insSampleUser.setInsSampleId(orderId);
        insSampleUser.setState(0);
        insSampleUser.setSonLaboratory(laboratory);
         insSampleUserMapper.insert(insSampleUser);
        /*校验一下result表*/
        CompletableFuture.supplyAsync(() -> {
            List<Integer> ips = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -122,7 +122,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId) {
    public int upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId,String sonLaboratory) {
        InsOrder insOrder = new InsOrder();
        insOrder.setId(orderId);
        insOrder.setAppointed(LocalDate.parse(appointed));
@@ -147,6 +147,7 @@
            insSampleUser.setState(0);
            insSampleUser.setUserId(userId);
            insSampleUser.setInsSampleId(orderId);
            insSampleUser.setSonLaboratory(sonLaboratory);
            insSampleUserMapper.insert(insSampleUser);
        }
        return 1;
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -421,7 +421,7 @@
        GROUP_CONCAT(b.inspection_item2
        SEPARATOR ',')
        inspection_item from (select * ,
        GROUP_CONCAT(CONCAT(inspection_item,'',inspection_item_subclass) SEPARATOR ',')inspection_item2 from ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        GROUP_CONCAT(CONCAT(inspection_item,'@',inspection_item_subclass) SEPARATOR ',')inspection_item2 from ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        BY b.ins_sample_id) c ON c.ins_sample_id = isa.id
        where (i.state = 1 or i.state = 3 or i.state = 4) and c.ins_sample_id IS not  NULL)A
        GROUP BY
inspect-server/src/main/resources/mapper/InsSampleMapper.xml
@@ -47,9 +47,10 @@
        LEFT JOIN ( <!--SELECT * FROM ins_sample_user GROUP BY ins_sample_id, user_id -->
        SELECT *
        FROM ins_sample_user u
        WHERE (ins_sample_id, id) IN (
        WHERE son_laboratory=#{sonLaboratory} and (ins_sample_id, id) IN (
        SELECT ins_sample_id, MAX(id)
        FROM ins_sample_user
        WHERE son_laboratory=#{sonLaboratory}
        GROUP BY ins_sample_id
        )
        ORDER BY ins_sample_id, id
@@ -71,7 +72,7 @@
        ) a
        LEFT JOIN ins_order_state ios ON ios.ins_order_id = a.id AND ios.laboratory = a.son_laboratory
        left join (SELECT td.user_id order_user_id, td.ins_sample_id FROM ins_sample_user td,(SELECT max(id) id FROM
        ins_sample_user GROUP BY ins_sample_id) md where td.id = md.id
        ins_sample_user where son_laboratory=#{sonLaboratory} GROUP BY ins_sample_id) md where td.id = md.id
        <if test="userId !=null and userId!=''">
            and user_id = #{userId} OR user_id is NULL
        </if>
@@ -92,8 +93,8 @@
    <select id="inspectionOrderDetailsTaskSwitching" resultType="com.yuanchu.mom.vo.InsOrderPlanTaskSwitchVo">
        select * from(
        SELECT
        a.*,ios.ins_state,ios.verify_tell,isu2.order_user_id,(ios.verify_user = #{userId}) verify_user
        FROM
        a.*,ios.ins_state,ios.verify_tell,isu2.order_user_id,<!--(ios.verify_user = #{userId})--> verify_user
        <!--FROM
        (
        SELECT
        io.id,
@@ -127,7 +128,64 @@
        a.user_id DESC,
        a.type DESC,
        a.id
        ) b-->
        FROM
        (
        SELECT
        io.id,
        io.entrust_code,
        io.type,
        io.appointed,
        io.send_time,
        group_concat(distinct isa.sample,' ') sample,
        isu.user_id,
        user.name userName,
        ip.son_laboratory,
        io.ins_time
        FROM
        ins_order io
        LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
        LEFT JOIN ( <!--SELECT * FROM ins_sample_user GROUP BY ins_sample_id, user_id -->
        SELECT *
        FROM ins_sample_user u
        WHERE son_laboratory=#{sonLaboratory} and (ins_sample_id, id) IN (
        SELECT ins_sample_id, MAX(id)
        FROM ins_sample_user
        WHERE son_laboratory=#{sonLaboratory}
        GROUP BY ins_sample_id
        )
        ORDER BY ins_sample_id, id
        ) isu ON isu.ins_sample_id = io.id
        LEFT JOIN ins_product ip ON ip.ins_sample_id = isa.id
        LEFT JOIN user  ON isu.user_id = user.id
        WHERE
        io.state = 1
        # AND io.ins_state != 5
        and send_time is not null
        <if test="userId !=null and userId!=''">
            and (isu.user_id = #{userId} OR isu.user_id is NULL )
        </if>
        OR isu.user_id is NULL
        GROUP BY
        ip.son_laboratory,
        io.id
        ) a
        LEFT JOIN ins_order_state ios ON ios.ins_order_id = a.id AND ios.laboratory = a.son_laboratory
        left join (SELECT td.user_id order_user_id, td.ins_sample_id FROM ins_sample_user td,(SELECT max(id) id FROM
        ins_sample_user where son_laboratory=#{sonLaboratory} GROUP BY ins_sample_id) md where td.id = md.id
        <if test="userId !=null and userId!=''">
            and user_id = #{userId} OR user_id is NULL
        </if>
        OR user_id is NULL
        ) isu2 on
        isu2.ins_sample_id = a.id
        ORDER BY
        <!--a.user_id DESC,-->
        a.type DESC,
        a.id
        ) b
        where ins_state is not null)A
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java
@@ -36,4 +36,6 @@
    List<Map<String, Object>> performanceShiftYearList(String time, String userName, String laboratory);
    List<PerformanceShiftMapDto> performanceShiftList(String time, String userName, String laboratory);
    String seldepLimsId(int depLimsId);
}
performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java
@@ -6,11 +6,14 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.dto.PerformanceShiftAddDto;
import com.yuanchu.mom.dto.PerformanceShiftMapDto;
import com.yuanchu.mom.mapper.PerformanceShiftMapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.Enums;
import com.yuanchu.mom.pojo.PerformanceShift;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.EnumService;
import com.yuanchu.mom.service.PerformanceShiftService;
import com.yuanchu.mom.utils.JackSonUtil;
@@ -41,6 +44,12 @@
    @Autowired
    private EnumService enumService;
    @Autowired
    GetLook getLook;
    @Autowired
    UserMapper userMapper;
    @Transactional(rollbackFor = Exception.class)
    @Override
@@ -94,6 +103,20 @@
    @Override
    public Map<String, Object> performanceShiftPage(Page<Object> page, String time, String userName, String laboratory) {
        //查询当前登录人员的架构
        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        //判断全部,个人,组织的权限
        User user = userMapper.selectById(userId);//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        if (com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        IPage<PerformanceShiftMapDto> mapIPage = baseMapper.performanceShiftPage(page, time, userName, laboratory);
        List<Enums> shiftType = enumService.selectEnumByCategory("班次类型");
        List<Map<String, Object>> mapYearIPage = baseMapper.performanceShiftYearPage(time, userName, laboratory);
performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
@@ -11,21 +11,27 @@
    <select id="performanceShiftPage" resultMap="performanceShiftPageMap">
        SELECT
        if(u.department is not null and u.department != '', CONCAT(u.name, '(', u.department, ')'), u.name) name,
        GROUP_CONCAT(s.work_time, ':', s.shift, ':', s.id order by s.work_time SEPARATOR ';') AS shift_time, u.id user_id
        if(u2.department is not null and u2.department != '', CONCAT(u2.name, '(', u2.department, ')'), u2.name) name,
        GROUP_CONCAT(s.work_time, ':', s.shift, ':', s.id order by s.work_time SEPARATOR ';') AS shift_time, u2.id user_id
        FROM performance_shift s
        LEFT JOIN user u on u.id = s.user_id
        LEFT JOIN (SELECT u.* from
        user u
        left join department_lims dl on FIND_IN_SET(dl.id,u.depart_lims_id)
        where state=1
        <if test="laboratory != null and laboratory != ''">
          and   dl.name=#{laboratory}
        </if>
         ) u2    on u2.id = s.user_id
        <where>
            name is not null
            <if test="time != null and time != ''">
                and DATE_FORMAT(s.work_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m' )
            </if>
            <if test="userName != null and userName != ''">
                and u.name like concat('%', #{userName}, '%')
            </if>
            <if test="laboratory != null and laboratory != ''">
                and u2.name like concat('%', #{userName}, '%')
            </if>
        </where>
        GROUP BY u.id
        GROUP BY u2.id
        order by s.create_time
    </select>
@@ -108,4 +114,10 @@
        GROUP BY u.id
        order by s.create_time
    </select>
    <select id="seldepLimsId" resultType="java.lang.String">
        select name
        from department_lims
        where id = #{depLimsId}
    </select>
</mapper>
system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java
@@ -1,16 +1,34 @@
package com.yuanchu.mom.backup;
import com.yuanchu.mom.dto.PerformanceShiftAddDto;
import com.yuanchu.mom.mapper.EnumMapper;
import com.yuanchu.mom.pojo.Enums;
import com.yuanchu.mom.pojo.PerformanceShift;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.EnumService;
import com.yuanchu.mom.service.PerformanceShiftService;
import com.yuanchu.mom.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.*;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.Date;
import java.util.Dictionary;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
//@Component
@Component
@EnableScheduling
@Slf4j
public class MysqlDataBackup {
@@ -55,11 +73,20 @@
    @Value("${backup.mysqldump}")
    private String mysqldump;
    @Resource
    private PerformanceShiftService performanceShiftService;
    @Resource
    private EnumService enumService;
    @Resource
    private UserService userService;
    /**
     * æ¯å¤©æ™šä¸Š23点05秒执行 ã€  0 0 4 1/1 * ? ã€‘
     * æµ‹è¯• 20 ç§’一次【  0/20 * * * * ? ã€‘@Scheduled(cron = "5 * 23 * * ?")
     */
//    @Scheduled(cron = "5 0 23 * * ?")
    //@Scheduled(cron = "0/20 * * * * ?")
    private void configureTasks() {
        log.info("【备份数据库】--START");
        String dbUrl2 = dbUrl.replace("jdbc:mysql://", "");
@@ -171,6 +198,50 @@
        }
    }
    /**
     * å®šæ—¶ä»»åŠ¡,每个月1号的00:00:00
     * ç»™æ¯ä¸ªäººéƒ½è¿›è¡ŒæŽ’班(默认早班)
     */
    @Scheduled(cron = "0 0 0 1 * ?")
    //@Scheduled(cron = "0/20 * * * * ?")
    private void timerCreateSchedule(){
        System.out.println("开始给每个人进行排班,默认早班======start");
        // TODO ç»™æ¯ä¸ªäººéƒ½è¿›è¡ŒæŽ’班(默认早班)
        PerformanceShiftAddDto performanceShiftAddDto = new PerformanceShiftAddDto();
        //班次--早(查询字典)
        List<Enums> shiftType = enumService.selectEnumByCategory("班次类型");
        List<String> collect = shiftType.stream().filter(enums -> enums.getLabel().equals("早")).map(enums -> enums.getValue()).collect(Collectors.toList());
        performanceShiftAddDto.setShift(collect.get(0));
        //人员--所有人
        String userIds = userService.getDeviceManager().stream().map(user -> user.getId().toString()).distinct().collect(Collectors.joining(","));
        performanceShiftAddDto.setUserId(userIds);
        //周次--当月所有
        // èŽ·å–å½“å‰æ—¥æœŸ
        LocalDate today = LocalDate.now();
        // èŽ·å–æœ¬æœˆçš„ç¬¬ä¸€å¤©å’Œæœ€åŽä¸€å¤©
        LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
        LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
        // èŽ·å–å‘¨å­—æ®µä¿¡æ¯ï¼ˆæ ¹æ®åŒºåŸŸè®¾ç½®ï¼‰
        WeekFields weekFields = WeekFields.of(Locale.getDefault());
        // èŽ·å–æœ¬æœˆç¬¬ä¸€å¤©çš„å‘¨ä¸€
        LocalDate startOfWeek = firstDayOfMonth.with(TemporalAdjusters.previousOrSame(weekFields.getFirstDayOfWeek()));
        // éåŽ†æœ¬æœˆæ‰€æœ‰å¤©æ•°ï¼Œæ‰¾å‡ºæ¯å‘¨çš„ç¬¬ä¸€å¤©å’Œæœ€åŽä¸€å¤©
        LocalDate endOfWeek;
        while (startOfWeek.isBefore(firstDayOfMonth.plusMonths(1))) {
            endOfWeek = startOfWeek.plusDays(6);
            LocalDateTime startDateTime = LocalDateTime.of(startOfWeek, LocalTime.MIDNIGHT);
            LocalDateTime endDateTime = LocalDateTime.of(endOfWeek, LocalTime.MIDNIGHT);
            System.out.println("Week starts on " + startDateTime + " and ends on " + endDateTime);
            performanceShiftAddDto.setStartWeek(startDateTime);
            performanceShiftAddDto.setEndWeek(endDateTime);
            performanceShiftService.performanceShiftAdd(performanceShiftAddDto);
            startOfWeek = startOfWeek.plusWeeks(1);
        }
        System.out.println("排班结束======end");
    }
    /**
     * åˆ¤æ–­æ–‡ä»¶æ˜¯å¦å­˜åœ¨ï¼Œä¸å­˜åœ¨åˆ›å»º
     */
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -3,12 +3,42 @@
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.Locale;
@SpringBootTest
class SystemRunApplicationTest {
    @Test
    void  contextLoads() throws Exception {
    void  contextLoads() {
                // èŽ·å–å½“å‰æ—¥æœŸ
                LocalDate today = LocalDate.now();
                // èŽ·å–æœ¬æœˆçš„ç¬¬ä¸€å¤©å’Œæœ€åŽä¸€å¤©
                LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
                LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
                // èŽ·å–å‘¨å­—æ®µä¿¡æ¯ï¼ˆæ ¹æ®åŒºåŸŸè®¾ç½®ï¼‰
                WeekFields weekFields = WeekFields.of(Locale.getDefault());
                // èŽ·å–æœ¬æœˆç¬¬ä¸€å¤©çš„å‘¨ä¸€
                LocalDate startOfWeek = firstDayOfMonth.with(TemporalAdjusters.previousOrSame(weekFields.getFirstDayOfWeek()));
                // éåŽ†æœ¬æœˆæ‰€æœ‰å¤©æ•°ï¼Œæ‰¾å‡ºæ¯å‘¨çš„ç¬¬ä¸€å¤©å’Œæœ€åŽä¸€å¤©
                LocalDate endOfWeek;
                while (startOfWeek.isBefore(firstDayOfMonth.plusMonths(1))) {
                    endOfWeek = startOfWeek.plusDays(6);
                    LocalDateTime startDateTime = LocalDateTime.of(startOfWeek, LocalTime.MIDNIGHT);
                    LocalDateTime endDateTime = LocalDateTime.of(endOfWeek, LocalTime.MIDNIGHT);
                    System.out.println("Week starts on " + startDateTime + " and ends on " + endDateTime);
                    startOfWeek = startOfWeek.plusWeeks(1);
                }
    }
}