chenrui
2025-03-05 7374d150b7f08d4b126d3d0fde57ab55febb53dd
Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-after into dev_cr
已修改23个文件
已添加6个文件
470 ■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetric.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/IDeviceMetricService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceMaintenancePlanMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/InstructionMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/logback.xml 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/LocalDateTimeSerializerConfig.java 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java
@@ -126,7 +126,7 @@
     * @return
     */
    @ApiOperation(value = "设备验收附件删除")
    @GetMapping("/delDeviceAcceptanceFileList")
    @DeleteMapping("/delDeviceAcceptanceFileList")
    public Result delDeviceAcceptanceFileList(Integer acceptanceFileId){
        return Result.success(deviceAcceptanceFileService.removeById(acceptanceFileId));
    }
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java
@@ -35,7 +35,7 @@
     */
    @ApiOperation("分页查询设备点检记录")
    @GetMapping("/getDeviceInspectionRecordByPage")
    public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(IPage page, DeviceInspectionRecordDto itemParameter) {
    public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(Page page, DeviceInspectionRecordDto itemParameter) {
        return deviceInspectionRecordService.getDeviceInspectionRecordByPage(page, itemParameter);
    }
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java
@@ -41,9 +41,9 @@
    private DeviceOperationInstructionService deviceOperationInstructionService;
    @ApiOperation(value = "作业指导书 åˆ†é¡µ")
    @ApiOperation(value = "作业指导书分页")
    @GetMapping("/pageByPageQueryOfHomeworkInstructions")
    public Result<IPage<DeviceInstruction>> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto){
    public Result<IPage<DeviceOperationInstructionDto>> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto){
        return Result.success(deviceInstructionService.pageByPageQueryOfHomeworkInstructions(page, operationInstructionDto));
    }
@@ -54,7 +54,7 @@
        return Result.success();
    }
    @ApiOperation(value = "作业指导书编辑")
    @ApiOperation(value = "作业指导书详情")
    @GetMapping("/homeworkGuidebookEditor")
    public Result<Map<String, Object>> homeworkGuidebookEditor(Integer instructionId){
        DeviceInstruction instruction = deviceInstructionService.getById(instructionId);
@@ -66,7 +66,7 @@
    }
    @ApiOperation(value = "作业指导书受控文件删除")
    @GetMapping("/deleteHomeworkGuidebook")
    @DeleteMapping("/deleteHomeworkGuidebook")
    public Result deleteHomeworkGuidebook(String ids){
        if (ObjectUtils.isNotEmpty(ids)) {
            String[] idArray = ids.split(",");
@@ -76,7 +76,7 @@
    }
    @ApiOperation(value = "作业指导书删除")
    @GetMapping("/homeworkGuidebook")
    @DeleteMapping("/homeworkGuidebook")
    public Result homeworkGuidebook(String id, String instructionId){
        // åˆ é™¤å­è¡¨æ•°æ®
        deviceOperationInstructionService.removeById(id);
@@ -91,8 +91,10 @@
    }
    @ApiOperation(value = "作业指导书审批")
    @GetMapping("/approvalOfHomeworkInstructionManual")
    public Result approvalOfHomeworkInstructionManual(String id, Boolean status){
    @PostMapping("/approvalOfHomeworkInstructionManual")
    public Result approvalOfHomeworkInstructionManual(@RequestBody Map<String,Object> map){
        Integer id =(Integer) map.get("id");
        Boolean status =(Boolean) map.get("status");
        deviceOperationInstructionService.update(Wrappers.<OperationInstruction>lambdaUpdate()
                .eq(OperationInstruction::getId, id)
                .set(OperationInstruction::getStatus, status)
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -71,7 +71,7 @@
     */
    @ApiOperation(value = "新增设备维护保养")
    @DeleteMapping("/deleteDeviceMaintenance")
    public void deleteDeviceMaintenance(@PathVariable Integer id) {
    public void deleteDeviceMaintenance( Integer id) {
        deviceMaintenanceService.removeById(id);
    }
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.device.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.device.pojo.DeviceMetric;
import com.ruoyi.device.service.IDeviceMetricService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@AllArgsConstructor
@RequestMapping("/deviceMetrics")
public class DeviceMetricController {
    @Autowired
    private IDeviceMetricService deviceMetricService;
    @PostMapping("/saveOrUpdateDeviceMetric")
    public Result create(@RequestBody DeviceMetric deviceMetric) {
        return Result.success(deviceMetricService.saveOrUpdate(deviceMetric));
    }
    @GetMapping("/selectDeviceMetric")
    public Result read(@RequestParam("deviceId") Integer deviceId, @RequestParam("type") String type) {
        return Result.success(deviceMetricService.list(Wrappers.<DeviceMetric>lambdaQuery()
                .eq(DeviceMetric::getDeviceId,deviceId)
                .eq(DeviceMetric::getType,type)));
    }
    @DeleteMapping("/deleteDeviceMetrics")
    public Result delete(@RequestParam("id") Integer id) {
      return   Result.success(deviceMetricService.removeById(id));
    }
}
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java
@@ -63,9 +63,9 @@
        return Result.success(deviceStateService.removeById(stateId));
    }
    @PostMapping("/deviceStateExport")
    @GetMapping("/deviceStateExport")
    public Result deviceStateExport(@RequestParam("deviceId") Integer deviceId, String processNumber, HttpServletResponse response) throws Exception {
        IPage<DeviceStateDto> deviceBorrows = deviceStateService.getDeviceStatePage(deviceId, new Page<>(1, -1), processNumber);
        IPage<DeviceStateDto> deviceBorrows = deviceStateService.getDeviceStatePage(deviceId, new Page<>(-1, -1), processNumber);
        List<DeviceStateExport> studentList  = JSONObject.parseArray(JSON.toJSONString(deviceBorrows.getRecords()), DeviceStateExport.class);
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.device.dto.DeviceInspectionRecordDto;
import com.ruoyi.device.pojo.DeviceInspectionRecord;
import org.apache.ibatis.annotations.Param;
@@ -23,6 +24,6 @@
     * @param queryWrappers
     * @return
     */
    IPage<DeviceInspectionRecord> selectDeviceParameterPage(IPage page, @Param("ew") QueryWrapper<DeviceInspectionRecordDto> queryWrappers);
    IPage<DeviceInspectionRecord> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceInspectionRecordDto> queryWrappers);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceMetric;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceMetricMapper extends BaseMapper<DeviceMetric> {
}
cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java
@@ -8,6 +8,8 @@
import com.ruoyi.device.pojo.DeviceInstruction;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/**
 * <p>
 * ä½œä¸šæŒ‡å¯¼ä¹¦æ·»åŠ å—æŽ§æ–‡ä»¶è¡¨ Mapper æŽ¥å£
@@ -19,5 +21,5 @@
public interface InstructionMapper extends BaseMapper<DeviceInstruction> {
    IPage<DeviceInstruction> pageByPageQueryOfHomeworkInstructions(Page page, @Param("ew") QueryWrapper<DeviceOperationInstructionDto> ew);
    IPage<DeviceOperationInstructionDto> pageByPageQueryOfHomeworkInstructions(Page page, @Param("ew") QueryWrapper<DeviceOperationInstructionDto> ew);
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetric.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("device_metrics")
public class DeviceMetric implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id; //id
    private Integer deviceId;            // è®¾å¤‡ID
    private String measurementParameter; // è®¡é‡å‚æ•°
    private String rangeOfMeasurement;   // é‡ç¨‹èŒƒå›´
    private String maxPermissibleError;  // æœ€å¤§å…è®¸è¯¯å·®
    private String judgmentCriteria;     // åˆ¤å®šæ ‡å‡†
    private String createdBy;           // åˆ›å»ºäºº
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime creationTime;      // åˆ›å»ºæ—¶é—´
    @ApiModelProperty("calibrate:校准;examine:核查")
    private String type; // ç±»åž‹
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java
@@ -1,6 +1,7 @@
package com.ruoyi.device.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.common.core.domain.Result;
import com.ruoyi.device.dto.DeviceInspectionRecordDto;
@@ -22,7 +23,7 @@
     * åˆ†é¡µæŸ¥è¯¢è®¾å¤‡ç‚¹æ£€è®°å½•
     * @param page
     */
    Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(IPage page, DeviceInspectionRecordDto deviceInspectionRecord);
    Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(Page page, DeviceInspectionRecordDto deviceInspectionRecord);
    /**
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java
@@ -7,6 +7,8 @@
import com.ruoyi.device.dto.DeviceOperationInstructionDto;
import com.ruoyi.device.pojo.DeviceInstruction;
import java.util.Map;
/**
 * <p>
 * ä½œä¸šæŒ‡å¯¼ä¹¦æ·»åŠ å—æŽ§æ–‡ä»¶è¡¨ æœåŠ¡ç±»
@@ -17,7 +19,7 @@
 */
public interface DeviceInstructionService extends IService<DeviceInstruction> {
    IPage<DeviceInstruction> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto);
    IPage<DeviceOperationInstructionDto> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto);
    void newHomeworkGuidebookAdded(DeviceInstructionDto instructionDto);
}
cnas-device/src/main/java/com/ruoyi/device/service/IDeviceMetricService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceMetric;
public interface IDeviceMetricService extends IService<DeviceMetric> {
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
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.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
@@ -52,6 +53,8 @@
    private DeviceMapper deviceMapper;
    @Resource
    private DeviceInspectionRecordDetailsService deviceInspectionRecordDetailsService;
    @Resource
    private DeviceInspectionRecordMapper deviceInspectionRecordMapper;
    /**
     * åˆ†é¡µæŸ¥è¯¢è®¾å¤‡ç‚¹æ£€è®°å½•
@@ -59,8 +62,8 @@
     * @param page å½“前页码
     */
    @Override
    public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(IPage page, DeviceInspectionRecordDto deviceInspectionRecordDto) {
        IPage<DeviceInspectionRecord> iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceInspectionRecordDto));
    public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(Page page, DeviceInspectionRecordDto deviceInspectionRecordDto) {
        IPage<DeviceInspectionRecord> iPage = deviceInspectionRecordMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceInspectionRecordDto));
        return Result.success(iPage);
    }
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java
@@ -21,6 +21,7 @@
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
/**
 * <p>
@@ -41,7 +42,7 @@
    private NumberGenerator<DeviceInstruction> numberGenerator;
    @Override
    public IPage<DeviceInstruction> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto) {
    public IPage<DeviceOperationInstructionDto> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto) {
        return baseMapper.pageByPageQueryOfHomeworkInstructions(page, QueryWrappers.queryWrappers(operationInstructionDto));
    }
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java
@@ -12,6 +12,7 @@
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.DeviceMaintenanceService;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -27,7 +28,11 @@
    @Override
    public IPage<DeviceMaintenance> getDeviceMaintenancePage(Page page, Integer deviceId, String deviceNumber) {
        return baseMapper.selectPage(page, Wrappers.<DeviceMaintenance>lambdaQuery()
        if (ObjectUtils.isEmpty(deviceNumber)){
            return baseMapper.selectPage(page, Wrappers.<DeviceMaintenance>lambdaQuery()
                    .eq(DeviceMaintenance::getDeviceId, deviceId));
        }
       else return baseMapper.selectPage(page, Wrappers.<DeviceMaintenance>lambdaQuery()
                .eq(DeviceMaintenance::getDeviceId, deviceId)
                .like(DeviceMaintenance::getDeviceNumber, deviceNumber));
    }
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceMetricMapper;
import com.ruoyi.device.pojo.DeviceMetric;
import com.ruoyi.device.service.IDeviceMetricService;
import org.springframework.stereotype.Service;
@Service
public class DeviceMetricServiceImpl extends ServiceImpl<DeviceMetricMapper, DeviceMetric> implements IDeviceMetricService {
}
cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml
@@ -4,9 +4,8 @@
    <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.DeviceInspectionRecord">
        SELECT
            *
        from device_inspection_record
        select * from ( SELECT *
        from device_inspection_record ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
cnas-device/src/main/resources/mapper/DeviceMaintenancePlanMapper.xml
@@ -11,7 +11,7 @@
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectMaintenancePlanById" resultType="com.ruoyi.device.pojo.DeviceMaintenancePlan">
    <select id="selectMaintenancePlanById" resultType="com.ruoyi.device.dto.DeviceMaintenancePlanDto">
        select
            dmp.*,
            date_format(dmp.date_preparation, '%Y-%m-%d') as datePreparationStr,
cnas-device/src/main/resources/mapper/InstructionMapper.xml
@@ -1,17 +1,20 @@
<?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.device.mapper.InstructionMapper">
    <select id="pageByPageQueryOfHomeworkInstructions" resultType="com.ruoyi.device.pojo.DeviceInstruction">
    <select id="pageByPageQueryOfHomeworkInstructions" resultType="com.ruoyi.device.dto.DeviceOperationInstructionDto">
        SELECT
            doi.*,di.*,d.device_name, d.management_number device_number, d.specification_model device_model, u.name uploader_name, u1.name approver_name
        doi.*,di.*,
        d.device_name deviceName,
        d.management_number deviceNumber,
        d.specification_model deviceModel,
        u.name uploaderName,
        u1.name approverName
        FROM
            device_operation_instruction doi
                LEFT JOIN device_instruction di ON di.id = doi.instruction_id
                left join device d on d.id = doi.device_id
                left join user u on u.id = doi.uploader
                left join user u1 on u1.id = doi.approver_id
        device_operation_instruction doi
        LEFT JOIN device_instruction di ON di.id = doi.instruction_id
        left join device d on d.id = doi.device_id
        left join user u on u.id = doi.uploader
        left join user u1 on u1.id = doi.approver_id
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -55,6 +55,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
@@ -141,8 +142,7 @@
    private InsOrderFactoryVerifyMapper insOrderFactoryVerifyMapper;
    @Resource
    private InsOrderFactoryVerifyItemService insOrderFactoryVerifyItemService;
    @Value("${file.licenseUrl}")
    private String licenseUrl;
    @Resource
    private SpotCheckQuarterItemMapper spotCheckQuarterItemMapper;
    @Resource
@@ -4227,7 +4227,7 @@
        FileOutputStream os = null;
        try {
            //凭证 ä¸ç„¶åˆ‡æ¢åŽæœ‰æ°´å°
            InputStream is = Files.newInputStream(new File(licenseUrl).toPath());
            InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
            License license = new License();
            license.setLicense(is);
            if (!license.getIsLicensed()) {
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
@@ -39,6 +39,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -83,8 +84,7 @@
    private String wordUrl;
    @Value("${file.path}")
    private String imgUrl;
    @Value("${file.licenseUrl}")
    private String licenseUrl;
    @Resource
    private InsOrderMapper insOrderMapper;
    @Resource
@@ -676,7 +676,7 @@
        FileOutputStream os = null;
        try {
            //凭证 ä¸ç„¶åˆ‡æ¢åŽæœ‰æ°´å°
            InputStream is = Files.newInputStream(new File(licenseUrl).toPath());
            InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
            License license = new License();
            license.setLicense(is);
            if (!license.getIsLicensed()) {
@@ -1115,7 +1115,7 @@
        FileOutputStream os = null;
        try {
            //凭证 ä¸ç„¶åˆ‡æ¢åŽæœ‰æ°´å°
            InputStream is = Files.newInputStream(new File(licenseUrl).toPath());
            InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
            License license = new License();
            license.setLicense(is);
            if (!license.getIsLicensed()) {
ruoyi-admin/src/main/resources/application-druid.yml
@@ -72,14 +72,11 @@
# ç…§ç‰‡å­˜å‚¨è·¯å¾„+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
file:
  path: D:\项目文件存储\image
  # è½¬pdf文件路径
  licenseUrl: D:\20892\Desktop\lims\code\center-lims-after\inspect-server\src\main\resources\lib\license.xml
  # ä¸Šä¼ æ–‡ä»¶å…è®¸çš„æ‰©å±•名
  allowed: png,jpg,jpeg,gif
wordUrl: D:\项目文件存储\word
twoCode: D:\项目文件存储\two_code
outPath: D:\项目文件存储\image
#oa:
ruoyi-admin/src/main/resources/application-prod.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
# æ•°æ®æºé…ç½®
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://114.132.189.42:9004/lims-ruoyi-test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
        enabled: false
        url:
        username:
        password:
      # åˆå§‹è¿žæŽ¥æ•°
      initialSize: 5
      # æœ€å°è¿žæŽ¥æ± æ•°é‡
      minIdle: 10
      # æœ€å¤§è¿žæŽ¥æ± æ•°é‡
      maxActive: 20
      # é…ç½®èŽ·å–è¿žæŽ¥ç­‰å¾…è¶…æ—¶çš„æ—¶é—´
      maxWait: 60000
      # é…ç½®è¿žæŽ¥è¶…æ—¶æ—¶é—´
      connectTimeout: 30000
      # é…ç½®ç½‘络超时时间
      socketTimeout: 60000
      # é…ç½®é—´éš”多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å°ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      minEvictableIdleTimeMillis: 300000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å¤§ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # é…ç½®æ£€æµ‹è¿žæŽ¥æ˜¯å¦æœ‰æ•ˆ
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        # è®¾ç½®ç™½åå•,不填则允许所有访问
        allow:
        url-pattern: /druid/*
        # æŽ§åˆ¶å°ç®¡ç†ç”¨æˆ·åå’Œå¯†ç 
        login-username: ruoyi
        login-password: 123456
      filter:
        stat:
          enabled: true
          # æ…¢SQL记录
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
minio:
  endpoint: http://114.132.189.42/
  port: 7019
  secure: false
  accessKey: admin
  secretKey: 12345678
  preview-expiry: 24 # é¢„览地址默认24小时
# ç…§ç‰‡å­˜å‚¨è·¯å¾„+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
file:
  path: /javaWork/lims-ruoyi/file/img
  # ä¸Šä¼ æ–‡ä»¶å…è®¸çš„æ‰©å±•名
  allowed: png,jpg,jpeg,gif
wordUrl: /javaWork/lims-ruoyi/file/word
twoCode: /javaWork/lims-ruoyi/file/two_code
#oa:
#    oaHost: http://192.168.0.49:8000/oa_workflowrequest.asmx?wsdl
#    prodIp: http://192.168.21.53:8081
#    unqualifiedProcessId: 41974
wechat:
  # è´¨é‡æŠ¥æ£€é€šçŸ¥
  examiningUrl: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=21993616-9966-4fe4-81b0-68e99a40c964
ifs:
  contract: ZTZB
  contract-key-get: 4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=
  contract-key-post: 4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=
  custorder: http://192.168.20.47/PurchService.ashx?
  custorder-port: http://192.168.20.47:8008/PurchService.ashx?
  erp-services: http://192.168.20.47:8081
# å¤‡æ³¨ 18083密码:zttZTT123!@
mqtt:
  url: tcp://mqtt-ztt.zttiot.com:1883 # æœåС噍ip
  username: forwarder # MQTT-服务端-用户名,后期会修改为用户登录名
  password: ZTlink12345 # MQTT-服务端-密码,,后期会修改为用户登录密码
  timeout: 100 # è¶…æ—¶æ—¶é—´ ï¼ˆå•位:秒)
  keepalive: 60 # å¿ƒè·³ ï¼ˆå•位:秒)
  qos: 1 # å¿ƒè·³åŒ…级别
  completion-timeout: 3000 # è¿žæŽ¥è¶…时时间(单位:秒)
  clientId: javaPublish # clientId
  subscribe: /ztt/v3/2443521/publish # è®¢é˜…主题
  client: false # å¦‚果开发需要启动测试,需要改为false不然会一直报错
ruoyi-admin/src/main/resources/application.yml
@@ -7,7 +7,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: D:/ruoyi/uploadPath
  profile: /javaWork/lims-ruoyi/file/uploadPath
  # èŽ·å–ip地址开关
  addressEnabled: false
  # éªŒè¯ç ç±»åž‹ math æ•°å­—计算 char å­—符验证
@@ -33,8 +33,9 @@
# æ—¥å¿—配置
logging:
  file-location: /javaWork/lims-ruoyi
  level:
    com.ruoyi: debug
    com.ruoyi: info
    org.springframework: warn
# ç”¨æˆ·é…ç½®
@@ -77,8 +78,8 @@
    port: 6379
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
#    password: 123456
#    # å¯†ç 
#    password: root2022!
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
    lettuce:
ruoyi-admin/src/main/resources/logback.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- æ—¥å¿—存放路径 -->
    <property name="log.path" value="/home/ruoyi/logs" />
    <springProperty scope="context" name="logs" source="logging.file-location" default="/logs"/>
    <property name="log.path" value="logs"/>
    <!-- æ—¥å¿—输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
@@ -11,7 +13,7 @@
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- ç³»ç»Ÿæ—¥å¿—输出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-info.log</file>
@@ -34,7 +36,7 @@
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-error.log</file>
        <!-- å¾ªçŽ¯æ”¿ç­–ï¼šåŸºäºŽæ—¶é—´åˆ›å»ºæ—¥å¿—æ–‡ä»¶ -->
@@ -56,38 +58,19 @@
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- ç”¨æˆ·è®¿é—®æ—¥å¿—输出  -->
    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-user.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- æŒ‰å¤©å›žæ»š daily -->
            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- æ—¥å¿—最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- ç³»ç»Ÿæ¨¡å—日志级别控制  -->
    <logger name="com.ruoyi" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />
    <!-- ç³»ç»Ÿæ¨¡å—日志级别控制  -->
    <logger name="com.ruoyi" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />
    <root level="info">
        <appender-ref ref="console" />
    </root>
    <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>
    <!--系统用户操作日志-->
    <logger name="sys-user" level="info">
        <appender-ref ref="sys-user"/>
    </logger>
</configuration>
</configuration>
ruoyi-framework/src/main/java/com/ruoyi/framework/config/LocalDateTimeSerializerConfig.java
@@ -1,36 +1,36 @@
package com.ruoyi.framework.config;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Configuration
public class LocalDateTimeSerializerConfig {
    @Value("${spring.jackson.date-format}")
    private String pattern;
    @Bean
    public LocalDateTimeSerializer localDateTimeSerializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }
    @Bean
    public LocalDateTimeDeserializer localDateTimeDeserializer() {
        return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern));
    }
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
            builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
            builder.simpleDateFormat(pattern);
        };
    }
}
//package com.ruoyi.framework.config;
//
//import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
//import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//
//@Configuration
//public class LocalDateTimeSerializerConfig {
//    @Value("${spring.jackson.date-format}")
//    private String pattern;
//
//    @Bean
//    public LocalDateTimeSerializer localDateTimeSerializer() {
//        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
//    }
//
//    @Bean
//    public LocalDateTimeDeserializer localDateTimeDeserializer() {
//        return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern));
//    }
//
//    @Bean
//    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
//        return builder -> {
//            builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
//            builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
//            builder.simpleDateFormat(pattern);
//        };
//    }
//}
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
@@ -1,12 +1,25 @@
package com.ruoyi.framework.config;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.CacheControl;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@@ -30,9 +43,6 @@
    @Value("${file.path}")
    private String filePath;
    @Value("${outPath}")
    private String outPath;
    @Value("${wordUrl}")
    private String wordUrl;
@@ -49,7 +59,6 @@
        //设置文件虚拟路径映射
        registry.addResourceHandler("/img/**").addResourceLocations("file:" + filePath + "/");
        registry.addResourceHandler("/outPath/**").addResourceLocations("file:" + outPath);
        registry.addResourceHandler("/word/**").addResourceLocations("file:" + wordUrl + "/");
    }
@@ -82,4 +91,30 @@
        // è¿”回新的CorsFilter
        return new CorsFilter(source);
    }
    // å…¨å±€æ ¼å¼åŒ–处理
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        String dateFormat = "yyyy-MM-dd HH:mm:ss";
        Jackson2ObjectMapperBuilder json = Jackson2ObjectMapperBuilder.json();
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        //localDateTime格式化
        JavaTimeModule module = new JavaTimeModule();
        LocalDateTimeDeserializer dateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(dateFormat));
        LocalDateTimeSerializer dateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateFormat));
        module.addDeserializer(LocalDateTime.class, dateTimeDeserializer);
        module.addSerializer(LocalDateTime.class, dateTimeSerializer);
        ObjectMapper objectMapper = json.modules(module)
                .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build();
        //date时间格式化
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.setDateFormat(new SimpleDateFormat(dateFormat.split(" ")[0]));
        // è®¾ç½®æ ¼å¼åŒ–内容
        converter.setObjectMapper(objectMapper);
        converters.add(0, converter);
    }
}
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -113,7 +113,7 @@
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
                    // é™æ€èµ„源,可匿名访问
                    .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**", "/img/**", "/outPath/**", "/word/**").permitAll()
                    .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**", "/img/**", "/word/**").permitAll()
                    .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                    // é™¤ä¸Šé¢å¤–的所有请求全部需要鉴权认证
                    .anyRequest().authenticated();