chenrui
2025-03-13 f0afb2b17f2f6e13925ffe1b6fd8c8ae724aec0e
分支合并冲突解决
已修改23个文件
已重命名2个文件
已删除1个文件
已添加8个文件
1035 ■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/templates/device_qr_show.html 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/templates/sample_qr_show.html 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/templates/word_qr_show.html 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/SuperVisePlanController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonSupervisePlanDetailsMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonSupervisionRecordMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrackRecordMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/InsOrderPlanServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportApproveConfigController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportController.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsReportApproveConfigService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsReportService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportApproveConfigServiceImpl.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/Result.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/pojo/AttachmentTable.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/UserMapper.xml 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
@@ -16,6 +16,7 @@
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.basic.service.StandardProductListService;
import com.ruoyi.common.utils.StringUtils;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -54,7 +55,7 @@
    @Override
    public List<StandardProductList> selectStandardProductList(InsSample1 insSample) {
        String[] models = insSample.getModel().split("-(?=[^-]*$)");//拆分最后一个【-】
        String[] splits = insSample.getFactory().split(" - ");
        String[] splits = StringUtils.isNotEmpty(insSample.getFactory())?insSample.getFactory().split(" - "):new String[0];
        List<StandardProductList> list = new ArrayList<>();
        if(splits.length<4){
            list = standardProductListMapper.selectDetail(insSample.getStandardMethodListId(), 1, models[0],"","");
@@ -77,13 +78,12 @@
                }
            }
        }
        String[] split1 = insSample.getFactory().split(" - ");
        //判断长度
        if (split1.length > 4) {
            if (ObjectUtils.isNotEmpty(split1[3])) {
                list = list.stream().filter(list1 -> Objects.nonNull(list1.getSample())&&Objects.equals(list1.getSample(),split1[3])).collect(Collectors.toList());
            }else if (split1[3].isEmpty()) {
                list = list.stream().filter(list1 ->  Objects.nonNull(list1.getSampleType())&&Objects.equals(list1.getSampleType(),split1[2])).collect(Collectors.toList());
        if (splits.length > 4) {
            if (ObjectUtils.isNotEmpty(splits[3])) {
                list = list.stream().filter(list1 -> Objects.nonNull(list1.getSample())&&Objects.equals(list1.getSample(),splits[3])).collect(Collectors.toList());
            }else if (splits[3].isEmpty()) {
                list = list.stream().filter(list1 ->  Objects.nonNull(list1.getSampleType())&&Objects.equals(list1.getSampleType(),splits[2])).collect(Collectors.toList());
            }
        }
        list = list.stream().filter(a -> {
cnas-device/src/main/resources/templates/device_qr_show.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,173 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>设备运行总览</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        body {
            -webkit-text-size-adjust: 100%!important;
            text-size-adjust: 100%!important;
            -moz-text-size-adjust: 100%!important;
        }
        .main{
            width: 100%;
            background-color: #f5f7fa;
            padding:10px 0;
        }
        .chartContainer{
            width:92%;
            margin-left:4%;
            height:200px;
            background-color: #fff;
            border-radius: 5px;
        }
        .info{
            width:92%;
            margin-left:4%;
            height:calc(100% - 230px);
            background-color: #fff;
            margin-top: 10px;
            padding-bottom: 10px;
            border-radius: 5px;
        }
        .info div{
            display: flex;
            width: 92%;
            margin-left: 4%;
            border-bottom: 1px solid #dddddd;
            height: 40px;
        }
        .info div span{
            width:100px;
            color: #797979;
            font-size: clamp(0.563rem, -2.813rem + 15vw, 0.75rem) !important;
            line-height: 40px;
        }
        .info div p{
            width:calc(100% - 100px);
            height:40px;
            font-size: clamp(0.563rem, -2.813rem + 15vw, 0.75rem) !important;
            font-weight: bold;
            line-height: 40px;
            text-align: right;
        }
        .success{
            color:#21a700
        }
        .failed{
            color:#d80000
        }
        .other{
            color: #e8a849;
        }
        .stop{
            color: lightgray;
        }
        .download-link{
            text-decoration:none;
            width:80px;
            height:25px;
            margin:7.5px 10px;
            background-color: #0066ff;
            color:#fff;
            font-size:clamp(0.563rem, -2.813rem + 15vw, 0.75rem) !important;
            border:none;
            border-radius: 3px;
            line-height: 25px;
            text-align: center;
        }
        .insProduct{
            overflow-x: scroll;
            overflow-y: hidden;
            display: inline-block
        }
        .info div:last-child{
            white-space: nowrap;
        }
    </style>
</head>
<body>
    <input type="hidden" id="progress" th:value="${progress}">
    <div class="main">
        <div class="chartContainer" id="chartContainer" ></div>
        <div class="info">
            <div>
                <span>设备名称</span>
                <p th:text="${deviceName}"></p>
            </div>
            <div>
                <span>设备编号</span>
                <p th:text="${deviceCode}"></p>
            </div>
            <div>
                <span>启用时长(å¹´)</span>
                <p th:text="${usedYears}"></p>
            </div>
            <div>
                <span>设备运行状态</span>
                <p th:if="${runStatus==0}" class="success">正常</p>
                <p th:if="${runStatus==1}" class="other">ç»´ä¿®</p>
                <p th:if="${runStatus==2}" class="stop">停用</p>
                <p th:if="${runStatus==3}" class="failed">报废</p>
            </div>
            <div>
                <span>
                    æœ€è¿‘校准日期
                </span>
                <input type="hidden" id="downloadUrl" th:value="${downloadUrl}">
                <a th:href="${downloadUrl}" onclick="return hasDownload()" th:download="${fileName}" rel="noopener noreferrer" class="download-link">证书下载</a>
                <p th:text="${lastCalibrationDate}"></p>
            </div>
            <div>
                <span>下次校准日期</span>
                <p th:text="${nextCalibrationDate}"></p>
            </div>
            <div>
                <span>校准总结论</span>
                <p th:if="${calibrateStatus=='合格'}" class="success" th:text="${calibrateStatus}"></p>
                <p th:if="${calibrateStatus=='不合格'}" class="failed" th:text="${calibrateStatus}"></p>
                <p th:if="${calibrateStatus=='其他'}" class="other" th:text="${calibrateStatus}"></p>
            </div>
            <div>
                <span>最近核查日期</span>
                <p th:text="${lastExamineDate}"></p>
            </div>
            <div>
                <span>下次核查日期</span>
                <p th:text="${nextExamineDate}"></p>
            </div>
            <div>
                <span>核查总结论</span>
                <p th:if="${examineStatus=='合格'}" class="success" th:text="${examineStatus}"></p>
                <p th:if="${examineStatus=='不合格'}" class="failed" th:text="${examineStatus}"></p>
                <p th:if="${examineStatus=='其他'}" class="other" th:text="${examineStatus}"></p>
            </div>
            <div>
                <span>最近维护日期</span>
                <p th:text="${maintenanceDate}"></p>
            </div>
            <div>
                <span>下次维护日期</span>
                <p th:text="${nextMaintenanceDate}"></p>
            </div>
            <div>
                <span>维护类型</span>
                <p th:text="${maintenanceType}"></p>
            </div>
            <div>
                <span>测量项目</span>
                <p th:text="${insProduct}" class="insProduct"></p>
            </div>
        </div>
    </div>
</body>
<script  th:src="@{/static/js/echarts.js}"></script>
<script th:src="@{/static/js/device_qr_show.js}"></script>
</html>
cnas-device/src/main/resources/templates/sample_qr_show.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <title>样品信息</title>
    <style>
    </style>
</head>
<body>
<p>
    <span style="font-weight: bold">样品编号:</span>
    <span th:text="${sampleCode}"></span>
</p>
<p>
    <span  style="font-weight: bold">委托单号:</span>
    <span th:text="${entrustCode}"></span>
</p>
<p>
    <span  style="font-weight: bold">规格型号:</span>
    <span th:text="${model}"></span>
</p>
<p>
    <span  style="font-weight: bold">样品名称:</span>
    <span th:text="${sample}"></span>
</p>
<p>
    <span  style="font-weight: bold">检测项目:</span>
    <span th:text="${inspectionItem}"></span>
</p>
<p>
    <span  style="font-weight: bold">样品状态:</span>
    <input type="checkbox" disabled name="insState" value="0" th:checked="${insState == 0}">
    <label>待检</label>
    <input type="checkbox" disabled name="insState" value="1" th:checked="${insState == 1}">
    <label>在检</label>
    <input type="checkbox" disabled name="insState" value="2" th:checked="${insState == 2}">
    <label>已检</label>
    <input type="checkbox" disabled name="isLeave" value="1" th:checked="${isLeave == 1}">
    <label>留样</label>
</p>
</body>
</html>
cnas-device/src/main/resources/templates/word_qr_show.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>检测报告</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .descriptions {
            width: 65%;
            text-align: left;
        }
        .descriptions-title {
            width: 35%;
            text-align: center;
        }
        .table {
            font-size: 1em;
            color: #1c2023;
            border-collapse: collapse;
            width: 100%;
        }
        .table tr {
            height: 3em;
        }
        table tr:nth-child(odd) .descriptions-title{
            background-color: #dddddd;
        }
        table tr:nth-child(odd) .descriptions{
            background-color: #f0f0f0;
        }
    </style>
</head>
<body>
<h4 th:text="'报告编号:' + ${entrustCode}"></h4>
<table class="table">
    <tr>
        <td class="descriptions-title">试 æ · å ç§°<br/>Name of Product</td>
        <td class="descriptions">
            <p>
                <span th:text="${productName}"></span>
                <br/>
                <span th:text="${productNameEn}"></span>
            </p>
        </td>
    </tr>
    <tr>
        <td class="descriptions-title">型 å·<br/>Type and Size</td>
        <td class="descriptions" th:text="${insOrderModel}"></td>
    </tr>
    <tr>
        <td class="descriptions-title">委 æ‰˜ å• ä½<br/>Client</td>
        <td class="descriptions">
            <p>
                <span th:text="${company}"></span>
                <br/>
                <span th:text="${companyEn}"></span>
            </p>
        </td>
    </tr>
    <tr>
        <td class="descriptions-title">检 éªŒ ç±» åˆ«<br/>Kind of Test</td>
        <td class="descriptions">
            <p>
                <span th:text="${orderType}"></span>
                <br/>
                <span th:text="${orderTypeEn}"></span>
            </p>
        </td>
    </tr>
    <tr>
        <td class="descriptions-title">收 æ · æ—¥ æœŸ<br/>Received date</td>
        <td class="descriptions">
            <p>
                <span th:text="${getTime}"></span>
                <br/>
                <span th:text="${getTimeEn}"></span>
            </p>
        </td>
    </tr>
    <tr>
        <td class="descriptions-title">ç­¾ å‘ æ—¥ æœŸ<br/>Date of issue</td>
        <td class="descriptions">
            <p>
                <span th:text="${issuingDate}"></span>
                <br/>
                <span th:text="${issuingDateEn}"></span>
            </p>
        </td>
    </tr>
</table>
</body>
</html>
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java
@@ -44,7 +44,7 @@
    @ApiOperation(value = "查询 å²—位职责")
    @GetMapping("personJobResponsibilitiesSelect")
    public Result<IPage<PersonJobResponsibilitiesDto>> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
    public Result<IPage<PersonJobResponsibilitiesDto>> personJobResponsibilitiesSelect(Page page, Integer userId, String departmentId, String userName) {
        IPage<PersonJobResponsibilitiesDto> iPage = personJobResponsibilitiesService.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
        return Result.success(iPage);
    }
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java
@@ -25,10 +25,7 @@
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.*;
/**
 * <p>
@@ -145,7 +142,7 @@
                                                                                   Integer departId,
                                                                                   Integer state) {
        Integer planId = 0;
        if(id.equals("null") || StringUtils.isEmpty(id)) {
        if(ObjectUtils.isNull(id) || StringUtils.isEmpty(id)) {
            planId = null;
        } else {
            planId = Integer.parseInt(id);
@@ -185,8 +182,9 @@
    @ApiOperation(value = "培训与考核记录 è®¤é¢†")
    @PostMapping("claimOfTrainingAndAssessmentRecords")
    public Result<?> claimOfTrainingAndAssessmentRecords(@RequestParam("claimAndClaim") Boolean claimAndClaim,
                                                         @RequestParam("courseId") Integer courseId) {
    public Result<?> claimOfTrainingAndAssessmentRecords(@RequestBody Map<String,Object> map) {
        Boolean claimAndClaim = (Boolean)map.get("claimAndClaim");
        Integer courseId = (Integer)map.get("courseId");
        personTrainingRecordService.claimOfTrainingAndAssessmentRecords(claimAndClaim, courseId);
        return Result.success();
    }
cnas-personnel/src/main/java/com/ruoyi/personnel/controller/SuperVisePlanController.java
@@ -1,9 +1,11 @@
package com.ruoyi.personnel.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.personnel.dto.PersonSupervisePlanDetailsDto;
import com.ruoyi.personnel.dto.PersonSupervisePlanDto;
import com.ruoyi.personnel.pojo.PersonSupervisePlan;
@@ -58,6 +60,9 @@
        PersonSupervisePlan byId = personSupervisePlanService.getById(id);
        // é€šä¿¡çš„为许军 ç”µåŠ›çš„æ˜¯åˆ˜å»ºå¾·
        Integer approvalId = null;
        if (ObjectUtils.isNull(byId.getDepartId())){
            throw new ErrorException("该用户没有配置相关实验室部门信息!!");
        }
        Integer departId = byId.getDepartId();
        if(departId.equals(18)) {
            approvalId = 11;
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
@@ -16,5 +17,5 @@
 */
public interface PersonJobResponsibilitiesMapper extends BaseMapper<PersonJobResponsibilities> {
    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName);
    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, @Param("userId") Integer userId, @Param("departmentId") String departmentId, @Param("userName") String userName);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPersonnelCapacityMapper.java
@@ -18,7 +18,7 @@
 */
public interface PersonPersonnelCapacityMapper extends BaseMapper<PersonPersonnelCapacity> {
    IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName);
    IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, @Param("departLimsId") Integer departLimsId, @Param("userId") Integer userId, @Param("userName") String userName);
    /**
     * æŸ¥è¯¢äººå‘˜èƒ½åŠ›æŽ¥å£
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
@@ -16,5 +17,5 @@
 */
public interface PersonPostAuthorizationRecordMapper extends BaseMapper<PersonPostAuthorizationRecord> {
    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName);
    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, @Param("departLimsId") Integer departLimsId, @Param("userId") Integer userId, @Param("userName") String userName);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
@@ -6,6 +6,7 @@
import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
@@ -20,7 +21,7 @@
 */
public interface PersonRewardPunishmentRecordMapper extends BaseMapper<PersonRewardPunishmentRecord> {
    IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page, Integer userId, String userName, Date startTime, Date endTime, Integer departmentId);
    IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page, @Param("userId") Integer userId, @Param("userName") String userName, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("departmentId") Integer departmentId);
    List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime);
    List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(@Param("userId") Integer userId, @Param("departmentId") Integer departmentId, @Param("userName") String userName, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonSupervisePlanDetailsMapper.java
@@ -5,6 +5,7 @@
import com.ruoyi.framework.mybatis_config.MyBaseMapper;
import com.ruoyi.personnel.dto.PersonSupervisePlanDetailsDto;
import com.ruoyi.personnel.pojo.PersonSupervisePlanDetails;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
@@ -16,6 +17,6 @@
 */
public interface PersonSupervisePlanDetailsMapper extends MyBaseMapper<PersonSupervisePlanDetails> {
    IPage<PersonSupervisePlanDetailsDto> pageByDate(Page page, String date, String project, Integer planId);
    IPage<PersonSupervisePlanDetailsDto> pageByDate(@Param("page") Page page, @Param("date") String date, @Param("project") String project, @Param("planId") Integer planId);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonSupervisionRecordMapper.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.dto.PersonSupervisionRecordDto;
import com.ruoyi.personnel.pojo.PersonSupervisionRecord;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
@@ -16,7 +17,7 @@
 */
public interface PersonSupervisionRecordMapper extends BaseMapper<PersonSupervisionRecord> {
    IPage<PersonSupervisionRecordDto> personSupervisionRecordPage(Page page, Integer userId, Integer departLimsId, String userName);
    IPage<PersonSupervisionRecordDto> personSupervisionRecordPage(Page page, @Param("userId") Integer userId, @Param("departLimsId") Integer departLimsId, @Param("userName") String userName);
    /**
     * æŸ¥è¯¢ç›‘督记录详情
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrackRecordMapper.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.personnel.pojo.PersonTrackRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -17,8 +18,8 @@
 */
public interface PersonTrackRecordMapper extends BaseMapper<PersonTrackRecord> {
    IPage<PersonTrackRecord> personTrackRecordSelect(Page page, String userId, String departLimsId);
    IPage<PersonTrackRecord> personTrackRecordSelect(Page page, @Param("userId") String userId, @Param("departLimsId") String departLimsId);
    List<PersonTrackRecord> personTrackRecordExport(String userId, String departLimsId);
    List<PersonTrackRecord> personTrackRecordExport(@Param("userId") String userId, @Param("departLimsId") String departLimsId);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java
@@ -20,12 +20,12 @@
public interface PersonTrainingDetailedMapper extends MyBaseMapper<PersonTrainingDetailed> {
    IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page,
                                                                    String trainingLecturerName,
                                                                    String courseCode, String trainingDate,
                                                                    Integer id,
                                                                    Integer userId,
                                                                    Integer loginUserId,
                                                                    Integer state);
                                                                    @Param("trainingLecturerName") String trainingLecturerName,
                                                                    @Param("courseCode") String courseCode, @Param("trainingDate") String trainingDate,
                                                                    @Param("id") Integer id,
                                                                    @Param("userId") Integer userId,
                                                                    @Param("loginUserId") Integer loginUserId,
                                                                    @Param("state") Integer state);
    /**
     * æ ¹æ®ä¸»è¡¨id查询详情
cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java
@@ -21,9 +21,9 @@
 */
public interface PersonTrainingRecordMapper extends BaseMapper<PersonTrainingRecord> {
    List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName);
    List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(@Param("trainingDetailedId") Integer trainingDetailedId, @Param("userName") String userName);
    IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId);
    IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, @Param("userName") String userName, @Param("userId") Integer userId, @Param("departLimsId") Integer departLimsId);
    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetails(Page page, Integer userId);
@@ -55,13 +55,13 @@
     * @param year
     * @return
     */
    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year);
    IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, @Param("userId") Integer userId, @Param("year") Integer year);
    /**
     * æ ¹æ®ç”¨æˆ·id和年份查询人员明细 åŸ¹è®­è®°å½•导出
     * @param userId
     * @param trainingDate
     * @param
     * @return
     */
    List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtosByTrainingDate(Integer userId, Integer year);
    List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtosByTrainingDate(@Param("userId") Integer userId, @Param("year") Integer year);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
import org.apache.ibatis.annotations.Param;
import javax.servlet.http.HttpServletResponse;
@@ -19,9 +20,9 @@
public interface PersonJobResponsibilitiesService extends IService<PersonJobResponsibilities> {
    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page,
                                                                        String userId,
                                                                        String departmentId,
                                                                        String userName);
                                                                        @Param("userId") Integer userId,
                                                                        @Param("departmentId") String departmentId,
                                                                        @Param("userName") String userName);
    void exportPersonJobResponsibilities(Integer id, HttpServletResponse response);
}
cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java
@@ -42,7 +42,7 @@
    @Override
    public IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
    public IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, Integer userId, String departmentId, String userName) {
        return baseMapper.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
    }
cnas-require/src/main/java/com/ruoyi/require/service/impl/InsOrderPlanServiceImpl.java
@@ -57,6 +57,7 @@
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;
inspect-server/pom.xml
@@ -45,6 +45,12 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>performance-server</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>cnas-process</artifactId>
        </dependency>
        <!-- poi-tl包生成报告 -->
        <dependency>
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
@@ -85,7 +85,7 @@
    @GetMapping("/selectOrderManDay")
    public Result<?> selectOrderManDay(Integer id) {
        int day = insProductService.selectOrderManDay(id);
        return Result.success("成功", LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        return Result.success(LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")),"成功");
    }
    @ApiOperation(value = "查询检验下单内容详情")
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportApproveConfigController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.inspect.controller;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.inspect.dto.ApproveConfigDTO;
import com.ruoyi.inspect.service.InsReportApproveConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/approveConfig")
@Api(tags = "报告审批签名配置")
public class InsReportApproveConfigController {
    @Autowired
    private InsReportApproveConfigService insReportApproveConfigService;
    @ApiOperation("审批签名配置按钮")
    @GetMapping("/getApproveConfigList")
    public Result getApproveConfigList(){
        return Result.success(insReportApproveConfigService.getApproveConfigList());
    }
    @ApiOperation("查询人员")
    @GetMapping("/getUserList")
    public Result getUserList(){
        return Result.success(insReportApproveConfigService.getUserList());
    }
    @ApiOperation("更新审批签名配置")
    @PostMapping("/updateApproveConfig")
    public Result updateApproveConfig(@RequestBody ApproveConfigDTO approveConfigDTO){
        return Result.success(insReportApproveConfigService.updateApproveConfig(approveConfigDTO));
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsReportController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,203 @@
package com.ruoyi.inspect.controller;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.BatchApprovalReportDTO;
import com.ruoyi.inspect.dto.ReportPageDto;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.service.InsReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.logging.log4j.util.Strings;
import org.apache.poi.hssf.record.SSTRecord;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
@RestController
@RequestMapping("/insReport")
@Api(tags = "检验报告")
public class InsReportController {
    @Resource
    private InsReportService insReportService;
    @Value("${wordUrl}")
    private String wordUrl;
    @ApiOperation(value = "查看检验报告列表")
    @GetMapping("/pageInsReport")
    public Result pageInsReport(Page page,ReportPageDto reportPageDto) throws Exception {
        return Result.success(insReportService.pageInsReport(page, reportPageDto));
    }
    @ApiOperation(value = "一键审批按钮")
    @PostMapping("/batchApprovalReport")
    public Result batchApprovalReport(@RequestBody BatchApprovalReportDTO batchApprovalReportDTO){
        try {
            insReportService.batchApprovalReport(batchApprovalReportDTO.getIds());
        }catch (Exception e){
            throw new RuntimeException(e);
        }
        return Result.success();
    }
    @ApiOperation(value = "获取审批进度")
    @GetMapping("/getBatchApprovalProgress")
    public Result getBatchApprovalProgress(){
        return Result.success(insReportService.getBatchApprovalProgress());
    }
    @ApiOperation(value = "查看检验报告数量信息")
    @GetMapping("/getReportCountInfo")
    public Result getReportCountInfo(ReportPageDto reportPageDto) throws Exception {
        return Result.success(insReportService.getReportCountInfo(reportPageDto));
    }
    @ApiOperation(value = "上传按钮")
    @PostMapping("/inReport")
    public Result inReport(MultipartFile file, Integer id) {
        String urlString;
        String pathName;
        try {
            String path = wordUrl;
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            InsReport insReport = insReportService.getById(id);
            // å¦‚æžœURLS有值 å…ˆå°†è¯¥æ–‡ä»¶åˆ é™¤
            if(Strings.isNotEmpty(insReport.getUrlS())){
                String url = wordUrl + File.separator + insReport.getUrlS().replace("/word/", "");
                File file1 = new File(url);
                if(file1.exists()) {
                    file1.delete();
                }
            }
            String code = insReport.getCode().replace("/", "") + ".docx";
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + code;
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            return Result.success(insReportService.inReport("/word/" + pathName, id));
        } catch (Exception e) {
            throw new ErrorException("文件上传失败");
        }
    }
    //下载
    @GetMapping("/downReport")
    public void downReport(@RequestParam("id") Integer id,@RequestParam("type") Integer type,  HttpServletResponse response) {
        insReportService.downReport(id,type, response);
    }
    @ApiOperation(value = "还原按钮")
    @PostMapping("/upReportUrl")
    public Result upReportUrl(Integer id) {
        return Result.success(insReportService.upReportUrl(id));
    }
    @ApiOperation(value = "编制按钮")
    @GetMapping("/upReportFile")
    public Result upReportFile() {
        return Result.success();
    }
    @ApiOperation(value = "提交按钮")
    @PostMapping("/writeReport")
    public Result writeReport(Integer id) {
        return Result.success(insReportService.writeReport(id));
    }
    @ApiOperation(value = "审核按钮")
    @PostMapping("/examineReport")
    public Result examineReport(Integer id, Integer isExamine, String examineTell) {
        return Result.success(insReportService.examineReport(id, isExamine, examineTell));
    }
    @ApiOperation(value = "批准按钮")
    @PostMapping("/ratifyReport")
    public Result ratifyReport(Integer id, Integer isRatify, String ratifyTell) {
        return Result.success(insReportService.ratifyReport(id, isRatify, ratifyTell));
    }
    @RequestMapping("/onlyOffice/save")
    public void saveFile(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
        PrintWriter writer = null;
        try {
            writer = response.getWriter();
            // èŽ·å–ä¼ è¾“çš„json数据
            Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
            String body = scanner.hasNext() ? scanner.next() : "";
            JSONObject jsonObject = JSONObject.parseObject(body);
            if (jsonObject.containsKey("url")) {
                String jsonArray = jsonObject.get("lastsave").toString(); // æ›´æ–°æ—¶é—´
                String fileUrl = jsonObject.get("url").toString(); // æ›´æ–°æ–‡ä»¶url
                HttpUtil.downloadFile(fileUrl, FileUtil.file(wordUrl + "/" + fileName));
            }
        } catch (Exception e) {
            e.printStackTrace();
            writer.write("{\"error\":-1}");
            return;
        }
        /*
         * status = 1,我们给onlyOffice的服务返回{"error":"0"}的信息。
         * è¿™æ ·onlyOffice会认为回调接口是没问题的,这样就可以在线编辑文档了,否则的话会弹出窗口说明
         */
        if (Objects.nonNull(writer)) {
            writer.write("{\"error\":0}");
        }
    }
    @ApiOperation(value = "批量下载按钮")
    @GetMapping("/downAll")
    public Result downAll(String ids) {
        return Result.success(insReportService.downAll(ids));
    }
    @ApiOperation(value = "批量上传按钮")
    @PostMapping("/upAll")
    public Result upAll(MultipartFile file) throws IOException {
        return Result.success(insReportService.upAll(file));
    }
    @ApiOperation(value = "撤回按钮")
    @PostMapping("/withdraw")
    public Result withdraw(@RequestBody Map<String,Object> map) {
        insReportService.withdraw(map);
        return  Result.success();
    }
    @GetMapping("/getLaboratoryByReportId")
    public Result getLaboratoryByReportId(Integer id) {
        return Result.success(insReportService.getLaboratoryByReportId(id));
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java
ÎļþÒÑɾ³ý
inspect-server/src/main/java/com/ruoyi/inspect/service/InsReportApproveConfigService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.dto.ApproveConfigDTO;
import com.ruoyi.inspect.pojo.InsReportApproveConfig;
import java.util.List;
import java.util.Map;
/**
 * @author 27233
 * @description é’ˆå¯¹è¡¨ã€ins_report_approve_config(报告审批签名配置)】的数据库操作Service
 * @createDate 2024-12-10 09:36:10
 */
public interface InsReportApproveConfigService extends IService<InsReportApproveConfig> {
    List<InsReportApproveConfig> getApproveConfigList();
    InsReportApproveConfig getApproveConfigByLaboratory(String laboratory);
    Map<String, List<Map<String,Object>>> getUserList();
    boolean updateApproveConfig(ApproveConfigDTO approveConfigDTO);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsReportService.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/service/InsReportService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
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;
@@ -13,10 +13,10 @@
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_report(检验报告)】的数据库操作Service
* @createDate 2024-03-17 22:10:02
*/
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€ins_report(检验报告)】的数据库操作Service
 * @createDate 2024-03-17 22:10:02
 */
public interface InsReportService extends IService<InsReport> {
    IPage<ReportPageDto> pageInsReport(Page page, ReportPageDto reportPageDto);
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportApproveConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.ruoyi.inspect.service.impl;
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.common.core.domain.entity.User;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.inspect.dto.ApproveConfigDTO;
import com.ruoyi.inspect.mapper.InsOrderMapper;
import com.ruoyi.inspect.mapper.InsReportApproveConfigMapper;
import com.ruoyi.inspect.pojo.InsReportApproveConfig;
import com.ruoyi.inspect.service.InsReportApproveConfigService;
import com.ruoyi.system.mapper.UserMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author 27233
 * @description é’ˆå¯¹è¡¨ã€ins_report_approve_config(报告审批签名配置)】的数据库操作Service实现
 * @createDate 2024-12-10 09:36:10
 */
@Service
public class InsReportApproveConfigServiceImpl extends ServiceImpl<InsReportApproveConfigMapper, InsReportApproveConfig>
        implements InsReportApproveConfigService {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private InsOrderMapper insOrderMapper;
    @Override
    public List<InsReportApproveConfig> getApproveConfigList() {
        Integer userId = Integer.parseInt(SecurityUtils.getUserId()+"");
        User user = userMapper.selectById(userId);//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = insOrderMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        return baseMapper.selectList(Wrappers.<InsReportApproveConfig>lambdaQuery()
                .eq(StringUtils.isNotBlank(laboratory),InsReportApproveConfig::getLaboratory,laboratory));
    }
    @Override
    public InsReportApproveConfig getApproveConfigByLaboratory(String laboratory) {
        return baseMapper.selectOne(Wrappers.<InsReportApproveConfig>lambdaQuery()
                .eq(StringUtils.isNotBlank(laboratory),InsReportApproveConfig::getLaboratory,laboratory));
    }
    @Override
    public Map<String, List<Map<String,Object>>> getUserList() {
        //查询通信和电力下的人员信息
        //查询当前登录人员的架构
        Integer userId = Integer.parseInt(SecurityUtils.getUserId()+"");
        //判断全部,个人,组织的权限
        User user = userMapper.selectById(userId);//当前登录的人
        //获取当前人所属实验室id
        String laboratory = "";
        String departLimsId = user.getDepartLimsId();
        if (org.apache.commons.lang3.ObjectUtils.isNotEmpty(departLimsId)) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = userMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        return userMapper.getPersonList(laboratory).stream().collect(Collectors.groupingBy(m->m.get("depName").toString()));
    }
    @Override
    public boolean updateApproveConfig(ApproveConfigDTO approveConfigDTO) {
        if(!approveConfigDTO.getConfigList().isEmpty()){
            approveConfigDTO.getConfigList().forEach(config->baseMapper.updateById(config));
            return true;
        }
        throw new RuntimeException("更新失败");
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
ÎļþÃû´Ó cnas-require/src/main/java/com/ruoyi/require/service/impl/InsReportServiceImpl.java ÐÞ¸Ä
@@ -1,10 +1,8 @@
package com.ruoyi.require.service.impl;
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.aspose.words.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -33,9 +31,9 @@
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsOrderState;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.process.mapper.ProcessReportMapper;
import com.ruoyi.process.pojo.ProcessReport;
import com.ruoyi.require.service.InsReportService;
import com.ruoyi.system.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -64,6 +62,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
@@ -80,6 +79,7 @@
@Slf4j
public class InsReportServiceImpl extends ServiceImpl<InsReportMapper, InsReport>
        implements InsReportService {
    @Resource
    private UserMapper userMapper;
@@ -118,7 +118,6 @@
    @Override
    public IPage<ReportPageDto> pageInsReport(Page page, ReportPageDto reportPageDto) {
        Map<String, Object> map = new HashMap<>();
        User user = userMapper.selectById(SecurityUtils.getUserId());//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
@@ -136,8 +135,10 @@
            wrapper.gt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(0))
                    .lt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(1));
        }
        return insReportMapper.pageInsReport(page, wrapper ,laboratory);
        IPage<ReportPageDto> iPage = insReportMapper.pageInsReport(page, wrapper, laboratory);
        return iPage;
    }
    @Override
    public int inReport(String url, Integer id) {
@@ -168,7 +169,7 @@
        String url = "";
        // 0 ä¸‹è½½docx 1 ä¸‹è½½pdf
        if(type == 0) {
          url  = Strings.isNotEmpty(insReport.getUrlS()) ? insReport.getUrlS() : insReport.getUrl();
            url  = Strings.isNotEmpty(insReport.getUrlS()) ? insReport.getUrlS() : insReport.getUrl();
        }else {
            url = insReport.getTempUrlPdf();
        }
@@ -210,11 +211,11 @@
        insReport.setId(id);
        insReport.setState(1);
        insReport.setWriteTime(LocalDateTime.now());//提交时间
        insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//提交人
        insReport.setWriteUserId(Integer.getInteger(SecurityUtils.getUserId().toString()));//提交人
        //获取提交人的签名地址
        String signatureUrl;
        try {
            signatureUrl = userMapper.selectById(SecurityUtils.getUserId().intValue()).getSignatureUrl();
            signatureUrl = userMapper.selectById(Integer.getInteger(SecurityUtils.getUserId().toString())).getSignatureUrl();
        } catch (Exception e) {
            throw new ErrorException("找不到编制人的签名");
        }
@@ -239,7 +240,7 @@
        if (ObjectUtils.isNotEmpty(examineTell)) {
            insReport.setExamineTell(examineTell);
        }
        insReport.setExamineUserId(SecurityUtils.getUserId().intValue());//审核人
        insReport.setExamineUserId(Integer.getInteger(SecurityUtils.getUserId().toString()));//审核人
        insReport.setExamineTime(LocalDateTime.now());//审核时间
        if (isExamine == 0) {
            //如果审核不通过
@@ -275,7 +276,7 @@
        if (ObjectUtils.isNotEmpty(ratifyTell)) {
            insReport.setRatifyTell(ratifyTell);
        }
        insReport.setRatifyUserId(SecurityUtils.getUserId().intValue());//批准人
        insReport.setRatifyUserId(Integer.getInteger(SecurityUtils.getUserId().toString()));//批准人
        insReport.setRatifyTime(LocalDateTime.now());//批准时间
        if (isRatify == 0) {
            //如果批准不通过
@@ -415,70 +416,6 @@
            }
            inReport("/word/" + pathName, insReport.getId());
        }
//        File tempFile = null;
//        File unzipDir = null;
//        try {
//            tempFile = File.createTempFile(wordUrl, ".zip");
//            file.transferTo(tempFile);
//
//            unzipDir = new File("uploaded_files");
//            if (!unzipDir.exists()) {
//                unzipDir.mkdir();
//            }
//            unzip(tempFile, unzipDir);
//            // å¤„理解压后的文件
//            File[] files = unzipDir.listFiles();
//            if (files != null) {
//                for (File f : files) {
//                    // æ ¹æ®æ–‡ä»¶åæŸ¥è¯¢id
//                    String name = f.getName();
//                    String code = f.getName().replace(".docx", "").replace("JCZX", "JCZX/");
//                    if(f.getName().lastIndexOf("_") != -1) {
//                        code = code.substring(f.getName().lastIndexOf("_") + 1);
//                    }
//                    //InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, f.getName().replace(".docx", "").replace("JCZX", "JCZX/")));
//                    InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, code));
//                    if (ObjectUtils.isEmpty(insReport)) {
//                        throw new ErrorException("没有找到 " + f.getName() + " è¿™ä¸ªæ–‡ä»¶å¯¹åº”的报告数据");
//                    }
//                    // å¦‚æžœUrlS有值 å…ˆå°†è¯¥æ–‡ä»¶åˆ é™¤
//                    if(Strings.isNotEmpty(insReport.getUrlS())) {
//                        String url = wordUrl + File.separator + insReport.getUrlS().replace("/word/", "");
//                        File file1 = new File(url);
//                        if(file1.exists()) {
//                            file1.delete();
//                        }
//                    }
//                    String urlString;
//                    String pathName;
//                    try {
//                        String path = wordUrl;
//                        File realpath = new File(path);
//                        if (!realpath.exists()) {
//                            realpath.mkdirs();
//                        }
//                        pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + insReport.getCode().replace("/", "") + ".docx";
//                        urlString = realpath + "/" + pathName;
//                        // å¤åˆ¶æ–‡ä»¶åˆ°æŒ‡å®šè·¯å¾„
//                        Files.copy(f.toPath(), new File(urlString).toPath(), StandardCopyOption.REPLACE_EXISTING);
//                        inReport("/word/" + pathName, insReport.getId());
//                    }
//                    catch (IOException e) {
//                        throw new ErrorException("文件上传失败");
//                    }
//                }
//            }
//        } catch (IOException e) {
//            throw new ErrorException("文件处理失败");
//        } finally {
//            if (tempFile != null && tempFile.exists()) {
//                tempFile.delete();
//            }
//            // é€’归删除解压目录及其中的文件
//            if (unzipDir.exists()) {
//                deleteDirectory(unzipDir); // åˆ é™¤æ—§çš„临时文件夹
//            }
//        }
        return 0;
    }
@@ -506,7 +443,7 @@
        List<Map<String, Object>> list = new ArrayList<>();
        Integer insOrderId = insReportMapper.selectById(id).getInsOrderId();
        insOrderStateMapper.selectList(new LambdaQueryWrapper<InsOrderState>()
                .eq(InsOrderState::getInsOrderId,insOrderId))
                        .eq(InsOrderState::getInsOrderId,insOrderId))
                .forEach(insOrderState -> {
                    Map<String, Object> map = new HashMap<>();
                    map.put("label",insOrderState.getLaboratory());
@@ -547,7 +484,7 @@
    @Transactional(rollbackFor = Exception.class)
    public void batchApprovalReport(List<Integer> ids) {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        Integer userId = SecurityUtils.getUserId().intValue();
        Integer userId = Integer.parseInt(SecurityUtils.getUserId().toString());
        String key = SYNC_REPORT_KEY_PREFIX+userId;
        //执行前删除之前的keys
        deleteRedisKeys(key);
@@ -676,7 +613,7 @@
    @Override
    public Map<String, Object> getBatchApprovalProgress() {
        Integer userId = SecurityUtils.getUserId().intValue();
        Integer userId = Integer.parseInt(SecurityUtils.getUserId().toString());
        String key = SYNC_REPORT_KEY_PREFIX + userId;
        Map<String, Object> map = new HashMap<>();
        map.put("hasProgress",false);
@@ -790,7 +727,7 @@
            file = new File(pdfPath);
            os = new FileOutputStream(file);
            //要转换的word文件
            Document doc = new Document(wordPath);
            com.aspose.words.Document doc = new com.aspose.words.Document(wordPath);
            doc.save(os, SaveFormat.PDF);
            String name = file.getName();
            return file.getName();
performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
@@ -110,8 +110,9 @@
    <select id="performanceShiftList" 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, u.department
        <!--if(u.department is not null and u.department != '', CONCAT(u.name, '(', u.department, ')'), u.name) name,-->
            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, u.dept_id
        FROM performance_shift s
        LEFT JOIN user u on u.id = s.user_id
        <where>
@@ -124,8 +125,8 @@
            <if test="laboratory != null and laboratory != ''">
            </if>
        </where>
        order by s.create_time
        GROUP BY u.id
        order by s.create_time
    </select>
    <select id="seldepLimsId" resultType="java.lang.String">
ruoyi-common/src/main/java/com/ruoyi/common/config/MinioConfig.java
@@ -17,6 +17,7 @@
    private String accessKey;
    private String secretKey;
    private Boolean secure;
    private String bucketName;
    @Bean
    public MinioClient getMinioClient() {
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/Result.java
@@ -54,6 +54,10 @@
        return restResult(data, FAIL, "操作失败");
    }
    public static <T> Result<T> fail(Integer code){
        return restResult(null, code,"fail");
    }
    public static <T> Result<T> fail(T data, String msg)
    {
        return restResult(data, FAIL, msg);
ruoyi-common/src/main/java/com/ruoyi/common/pojo/AttachmentTable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.common.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@TableName("attachment_table")
public class AttachmentTable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("其他表绑定id")
    private Integer subclassId;
    @ApiModelProperty("文件名称")
    private String fileName;
    @ApiModelProperty("文件类型")
    private String fileType;
    @ApiModelProperty("文件原名称")
    private String originalFileName;
    @ApiModelProperty("桶名")
    private String bucketName;
    @ApiModelProperty("所在模块名称")
    private String moduleName;
    @ApiModelProperty("其他表名")
    private String otherTableName;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
@@ -51,6 +51,8 @@
    String seldepLimsId(int depLimsId);
    List<Map<String,Object>> getPersonList(String laboratory);
    List<Map<String, Object>> getLaboratoryPersonList(String laboratory);
}
ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
@@ -83,11 +83,6 @@
        from user u left join custom c on u.company = c.id
        where u.id = #{userId}
    </select>
    <select id="seldepLimsId" resultType="java.lang.String">
        select name
        from department_lims
        where id = #{depLimsId}
    </select>
    <select id="getLaboratoryPersonList" resultType="java.util.Map">
        select
        u.id,
@@ -107,4 +102,28 @@
            and dl.name = #{laboratory}
        </if>
    </select>
    <select id="seldepLimsId" resultType="java.lang.String">
        select name
        from department_lims
        where id = #{depLimsId}
    </select>
    <select id="getPersonList" resultType="java.util.Map">
        select
        u.id,
        u.name,
        dl.name as depName
        from
        user u
        left join
        department_lims dl
        on
        FIND_IN_SET(dl.id,u.depart_lims_id)
        where
        dl.name in('通信产品实验室','电力产品实验室','检测办')
        and u.status = 1
        and u.is_custom = 0
        <if test="laboratory!='' and laboratory!=null">
            and (dl.name = #{laboratory} or dl.name='检测办')
        </if>
    </select>
</mapper>