diff --git a/src/main/java/com/bonus/aqgqj/basis/controller/ExamineController.java b/src/main/java/com/bonus/aqgqj/basis/controller/ExamineController.java index 8522062..ab89b2c 100644 --- a/src/main/java/com/bonus/aqgqj/basis/controller/ExamineController.java +++ b/src/main/java/com/bonus/aqgqj/basis/controller/ExamineController.java @@ -3,6 +3,7 @@ package com.bonus.aqgqj.basis.controller; import com.bonus.aqgqj.annotation.DecryptAndVerify; import com.bonus.aqgqj.annotation.LogAnnotation; import com.bonus.aqgqj.basis.entity.dto.ParamsDto; +import com.bonus.aqgqj.basis.entity.vo.ExperimentalDetailVo; import com.bonus.aqgqj.basis.entity.vo.ExperimentalVo; import com.bonus.aqgqj.basis.service.ExamineService; import com.bonus.aqgqj.system.vo.EncryptedReq; @@ -42,4 +43,15 @@ public class ExamineController { PageInfo pageInfo = new PageInfo<>(list); return ServerResponse.createSuccessPage(pageInfo, data.getData().getPage(), data.getData().getLimit()); } + + @PostMapping(value = "getDetailList") + @DecryptAndVerify(decryptedClass = ParamsDto.class)//加解密统一管理 + @LogAnnotation(operModul = "审查管理", operation = "查询审查详情列表", operDesc = "系统级事件", operType = "查询") +// @PreAuthorize("@pms.hasPermission('sys:examine:detailQuery')") + public ServerResponse getDetailList(EncryptedReq data) { + PageHelper.startPage(data.getData().getPage(), data.getData().getLimit()); + List list = service.getDetailList(data.getData()); + PageInfo pageInfo = new PageInfo<>(list); + return ServerResponse.createSuccessPage(pageInfo, data.getData().getPage(), data.getData().getLimit()); + } } diff --git a/src/main/java/com/bonus/aqgqj/basis/dao/ExamineMapper.java b/src/main/java/com/bonus/aqgqj/basis/dao/ExamineMapper.java index 514a837..be62183 100644 --- a/src/main/java/com/bonus/aqgqj/basis/dao/ExamineMapper.java +++ b/src/main/java/com/bonus/aqgqj/basis/dao/ExamineMapper.java @@ -1,10 +1,13 @@ package com.bonus.aqgqj.basis.dao; import com.bonus.aqgqj.basis.entity.dto.ParamsDto; +import com.bonus.aqgqj.basis.entity.vo.ExperimentalDetailVo; import com.bonus.aqgqj.basis.entity.vo.ExperimentalVo; +import org.apache.ibatis.annotations.MapKey; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Map; /** * @className:ExamineMapper @@ -17,10 +20,31 @@ import java.util.List; public interface ExamineMapper { /** * 试验审查列表 + * * @param dto * @return List * @author cwchen * @date 2024/7/23 10:15 */ List getList(ParamsDto dto); + + /** + * 审查详情列表 + * + * @param dto + * @return List + * @author cwchen + * @date 2024/7/23 17:58 + */ + List getDetailList(ParamsDto dto); + + /** + * 查询试验设备数量 + * @param experId + * @return List> + * @author cwchen + * @date 2024/7/23 18:16 + */ + @MapKey("id") + List> getExperDevItemsNum(Long experId); } diff --git a/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalDetailVo.java b/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalDetailVo.java index 58f8a5d..16d9bcb 100644 --- a/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalDetailVo.java +++ b/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalDetailVo.java @@ -63,6 +63,15 @@ public class ExperimentalDetailVo { */ private String status; + /** + * 试验人员 + */ + private String experimenter; + /** + * 试验时间 + */ + private String testTime; + /** * 样品 */ diff --git a/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalVo.java b/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalVo.java index 19a969c..2a85a90 100644 --- a/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalVo.java +++ b/src/main/java/com/bonus/aqgqj/basis/entity/vo/ExperimentalVo.java @@ -1,5 +1,6 @@ package com.bonus.aqgqj.basis.entity.vo; +import com.bonus.aqgqj.utils.UserUtil; import lombok.Data; /** @@ -56,4 +57,14 @@ public class ExperimentalVo { * 备注 */ private String remarks; + + /** + * 状态 + */ + private Integer status; + + /** + * 角色编码 + */ + private String roleCode = UserUtil.getLoginUser() != null ? UserUtil.getLoginUser().getRoleCode() : ""; } diff --git a/src/main/java/com/bonus/aqgqj/basis/service/ExamineService.java b/src/main/java/com/bonus/aqgqj/basis/service/ExamineService.java index 5f5beef..19f2c27 100644 --- a/src/main/java/com/bonus/aqgqj/basis/service/ExamineService.java +++ b/src/main/java/com/bonus/aqgqj/basis/service/ExamineService.java @@ -1,6 +1,7 @@ package com.bonus.aqgqj.basis.service; import com.bonus.aqgqj.basis.entity.dto.ParamsDto; +import com.bonus.aqgqj.basis.entity.vo.ExperimentalDetailVo; import com.bonus.aqgqj.basis.entity.vo.ExperimentalVo; import java.util.List; @@ -15,10 +16,20 @@ import java.util.List; public interface ExamineService { /** * 试验审查列表 + * * @param data * @return List * @author cwchen * @date 2024/7/23 10:14 */ List getList(ParamsDto data); + + /** + * 审查详情列表 + * @param data + * @return List + * @author cwchen + * @date 2024/7/23 17:57 + */ + List getDetailList(ParamsDto data); } diff --git a/src/main/java/com/bonus/aqgqj/basis/service/impl/ExamineServiceImpl.java b/src/main/java/com/bonus/aqgqj/basis/service/impl/ExamineServiceImpl.java index 4e43dc9..2c2af5f 100644 --- a/src/main/java/com/bonus/aqgqj/basis/service/impl/ExamineServiceImpl.java +++ b/src/main/java/com/bonus/aqgqj/basis/service/impl/ExamineServiceImpl.java @@ -1,15 +1,19 @@ package com.bonus.aqgqj.basis.service.impl; +import com.alibaba.fastjson.JSONArray; import com.bonus.aqgqj.basis.dao.ExamineMapper; import com.bonus.aqgqj.basis.entity.dto.ParamsDto; +import com.bonus.aqgqj.basis.entity.vo.ExperimentalDetailVo; import com.bonus.aqgqj.basis.entity.vo.ExperimentalVo; import com.bonus.aqgqj.basis.service.ExamineService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @className:ExamineServiceImpl @@ -30,6 +34,34 @@ public class ExamineServiceImpl implements ExamineService { List list = new ArrayList<>(); try { list = mapper.getList(dto); + for (ExperimentalVo vo : list) { + + } + } catch (Exception e) { + log.error(e.toString(), e); + } + return list; + } + + @Override + public List getDetailList(ParamsDto dto) { + List list = new ArrayList<>(); + try { + list = mapper.getDetailList(dto); + if (CollectionUtils.isNotEmpty(list)) { + for (ExperimentalDetailVo detailVo : list) { + // 样品试验结果、样品数量、送样总数 + List sampleList = new ArrayList<>(); + if (detailVo.getExperId() != null) { + List> mapList = mapper.getExperDevItemsNum(detailVo.getExperId()); + JSONArray jsonArray = new JSONArray(); + jsonArray.addAll(mapList); + sampleList = jsonArray.toJavaList(ExperimentalDetailVo.Sample.class); + } + detailVo.setSampleList(sampleList); + detailVo.setSampleQuantity(sampleList.size()); + } + } } catch (Exception e) { log.error(e.toString(), e); } diff --git a/src/main/resources/mappers/basis/ExamineMapper.xml b/src/main/resources/mappers/basis/ExamineMapper.xml index 888b817..cc0774d 100644 --- a/src/main/resources/mappers/basis/ExamineMapper.xml +++ b/src/main/resources/mappers/basis/ExamineMapper.xml @@ -14,6 +14,7 @@ su2.user_name AS dispatchUserName, DATE_FORMAT(ts.sample_date, '%Y-%m-%d') AS sampleDate, tt.team_name AS teamName, + ts.process_status AS status, WHEN process_status = 1 AND audti_status = 0 THEN '待审阅' END AS audtiStatus, @@ -70,8 +71,8 @@ AND ts.team_id = -1 - /*非管理员、非技术负责人、非中心负责人无审查数据权限*/ - + /*非管理员、非技术负责人、非中心负责人、非试验班组长无审查数据权限*/ + AND ts.team_id = -1 /*班组长-审阅*/ @@ -92,4 +93,50 @@ ORDER BY FIELD(audtiStatus, '待审阅','待审核','待审批') ASC,dispatch_time ASC + + + + diff --git a/src/main/resources/mappers/basis/ExperimentalMapper.xml b/src/main/resources/mappers/basis/ExperimentalMapper.xml index b546a40..ba8dd84 100644 --- a/src/main/resources/mappers/basis/ExperimentalMapper.xml +++ b/src/main/resources/mappers/basis/ExperimentalMapper.xml @@ -314,15 +314,15 @@ tsd.dev_type_code AS devTypeCode, ANY_VALUE(te.id) AS experId, COUNT(tsd.dev_type_code) AS sampleNum, - ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_remakr)) AS causeOfRejection, - CASE WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 0 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 0 THEN '待提交' - WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 1 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 0 THEN '待审阅' - WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 1 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 2 THEN '审阅不通过' - WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 2 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 0 THEN '待审核' - WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 2 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 3 THEN '审核不通过' - WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 3 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 0 THEN '待审批' - WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 3 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 4 THEN '审批不通过' - WHEN ANY_VALUE(GROUP_CONCAT(DISTINCT te.status)) = 4 AND ANY_VALUE(GROUP_CONCAT(DISTINCT te.audit_status)) = 1 THEN '试验完成' + ANY_VALUE(te.audit_remakr) AS causeOfRejection, + CASE WHEN ANY_VALUE(te.status) = 0 AND ANY_VALUE(te.audit_status) = 0 THEN '待提交' + WHEN ANY_VALUE(te.status) = 1 AND ANY_VALUE(te.audit_status) = 0 THEN '待审阅' + WHEN ANY_VALUE(te.status) = 1 AND ANY_VALUE(te.audit_status) = 2 THEN '审阅不通过' + WHEN ANY_VALUE(te.status) = 2 AND ANY_VALUE(te.audit_status) = 0 THEN '待审核' + WHEN ANY_VALUE(te.status) = 2 AND ANY_VALUE(te.audit_status) = 3 THEN '审核不通过' + WHEN ANY_VALUE(te.status) = 3 AND ANY_VALUE(te.audit_status) = 0 THEN '待审批' + WHEN ANY_VALUE(te.status) = 3 AND ANY_VALUE(te.audit_status) = 4 THEN '审批不通过' + WHEN ANY_VALUE(te.status) = 4 AND ANY_VALUE(te.audit_status) = 1 THEN '试验完成' ELSE '待试验' END AS status FROM tb_sample_device tsd diff --git a/src/main/resources/static/js/basis/child/auditData.js b/src/main/resources/static/js/basis/child/auditData.js new file mode 100644 index 0000000..362a47c --- /dev/null +++ b/src/main/resources/static/js/basis/child/auditData.js @@ -0,0 +1,207 @@ +let form, layer, table, tableIns, laydate; +let pageNum = 1, limitSize = 10; // 默认第一页,分页数量为10 +let deviceTypeList = []; +let idParam = null, statusParam = null; + +function setParams(params) { + idParam = JSON.parse(params).id; + statusParam = JSON.parse(params).status; + layui.use(['form', 'layer', 'table', 'laydate'], function () { + form = layui.form; + layer = layui.layer; + table = layui.table; + laydate = layui.laydate; + layui.form.render(); + deviceTypeList = getDictsSelect("dev_code"); + setDictSelectValue(deviceTypeList, 'devTypeCode'); + laydate.render({ + elem: '#ID-laydate-rangeLinked', + range: ['#startTime', '#endTime'], + rangeLinked: true + }); + pages(1, 10, 1); + }) +} + +function pages(pageNum, pageSize, typeNum) { + let params = getReqParams(pageNum, pageSize, typeNum); + $.ajax({ + url: dataUrl + "/examine/getDetailList", + headers: { + "token": tokens + }, + data: params, + type: 'POST', + async: false, + success: function (result) { + console.log(result); + if (result.code === 200) { + if (result.data) { + initTable(result.data, result.limit, result.curr) + laypages(result.count, result.curr, result.limit) + } + } else if (result.code === 500) { + layer.alert(result.msg, {icon: 2}) + } + }, error: function (xhr) { + error(xhr); + } + }); +} + +function laypages(total, page, limit) { + layui.use(['laypage'], function () { + let laypage = layui.laypage; + laypage.render({ + elem: 'voi-page', + count: total, + curr: page, + limit: limit, + limits: [10, 20, 50, 100, 200, 500], + layout: ['prev', 'page', 'next', 'skip', 'count', 'limit'], + groups: 5, + jump: function (obj, first) { + if (!first) { + pageNum = obj.curr, limitSize = obj.limit; + pages(obj.curr, obj.limit, null); + } + } + }); + }) +} + +/*初始化表格*/ +function initTable(dataList, limit, page) { + let loadingMsg = layer.msg("数据加载中,请稍候...", {icon: 16, scrollbar: false, time: 0,}); + tableIns = table.render({ + elem: "#table_data", + height: "full-140", + data: dataList, + limit: limit, + cols: [ + [ + //表头 + { + title: "序号", width: 80, unresize: true, align: "center", + templet: function (d) { + return (page - 1) * limit + d.LAY_NUM; + } + }, + {field: "devTypeName", title: "设备类型", unresize: true, align: "center"}, + {field: "sampleNum", title: "送样总数", unresize: true, align: "center"}, + {field: "sampleQuantity", title: "样品总数", unresize: true, align: "center"}, + {field: "experimenter", title: "试验人员", unresize: true, align: "center"}, + {field: "testTime", title: "试验时间", unresize: true, align: "center"}, + {field: "status", title: "状态", unresize: true, align: "center"}, + { title: "原始记录", unresize: true, align: "center", + templet: function (d) { + let html = ''; + html += "查看"; + return html; + }}, + { + title: "操作", unresize: true, width: 180, align: "center", + templet: function (d) { + let html = ''; + // html += ""; + html += setButtonName(d.id, d.roleCode, d.status); + return html; + } + }, + ], + ], + done: function (res, curr, count) { + layer.close(loadingMsg); + table.resize("table_data"); + count || this.elem.next(".layui-table-view").find(".layui-table-header").css("display", "inline-block"); + count || this.elem.next(".layui-table-view").find(".layui-table-box").css("overflow", "auto"); + }, + }); +} + + +// 获取参数 +function getReqParams(page, limit, type) { + let obj = {}; + if (!type) { + obj = { + page: page + "", + limit: limit + "", + keyWord: $('#keyWord').val(), + startTime: $('#startTime').val(), + endTime: $('#endTime').val(), + devTypeCode: $('#devTypeCode').val(), + id: idParam + }; + } else { + obj = { + page: '1', + limit: '10', + keyWord: '', + accessType: '', + startTime: '', + endTime: '', + devTypeCode: '', + id: idParam + }; + } + obj = { + encryptedData: encryptCBC(JSON.stringify(obj)) + } + return obj; +} + +// 查询/重置 +function query() { + let pattern = new RegExp("[%_<>]"); + if (pattern.test($("#ip").val())) { + $("#ip").val(''); + return layer.msg('ip查询包含特殊字符,请重新输入', { + icon: 2, + time: 2000 //2秒关闭(如果不配置,默认是3秒) + }); + } + pageNum = 1; + pages(1, limitSize); +} + +function reloadData() { + pages(pageNum, limitSize); +} + +// 审核数据 +function auditData(id, status, btnName) { + let title = btnName + let param = { + 'id': id, + 'status': status + } + openIframe3("auditData", title, "child/auditData.html", '1500px', '800px', param); +} + +const data = { + administrators1: '审阅', + administrators2: '审核', + administrators3: '审批', + experimentalTeamLeader1: '审阅', + technicalDirector2: '审核', + centerManager3: '审批' +}; + +function getValueByKey(obj, key) { + return obj[key]; +} + +/**设置审核类型*/ +function setButtonName(id, value, status) { + let cent = ""; + const btnName = getValueByKey(data, value + status) + if (btnName) { + cent += "" + btnName + ""; + } + return cent; +} + +function seta() { + alert('12') +} \ No newline at end of file diff --git a/src/main/resources/static/js/basis/examine.js b/src/main/resources/static/js/basis/examine.js index b1ee0f8..73c7187 100644 --- a/src/main/resources/static/js/basis/examine.js +++ b/src/main/resources/static/js/basis/examine.js @@ -1,14 +1,14 @@ -let form, layer, table, tableIns,laydate; +let form, layer, table, tableIns, laydate; let pageNum = 1, limitSize = 10; // 默认第一页,分页数量为10 let deviceTypeList = []; -layui.use(['form', 'layer', 'table','laydate'], function () { +layui.use(['form', 'layer', 'table', 'laydate'], function () { form = layui.form; layer = layui.layer; table = layui.table; laydate = layui.laydate; layui.form.render(); deviceTypeList = getDictsSelect("dev_code"); - setDictSelectValue(deviceTypeList,'devTypeCode'); + setDictSelectValue(deviceTypeList, 'devTypeCode'); laydate.render({ elem: '#ID-laydate-rangeLinked', range: ['#startTime', '#endTime'], @@ -93,8 +93,8 @@ function initTable(dataList, limit, page) { title: "操作", unresize: true, width: 180, align: "center", templet: function (d) { let html = ''; - html += "" + - ""; + // html += ""; + html += setButtonName(d.id, d.roleCode, d.status); return html; } }, @@ -120,7 +120,7 @@ function getReqParams(page, limit, type) { keyWord: $('#keyWord').val(), startTime: $('#startTime').val(), endTime: $('#endTime').val(), - devTypeCode : $('#devTypeCode').val(), + devTypeCode: $('#devTypeCode').val(), }; } else { obj = { @@ -130,7 +130,7 @@ function getReqParams(page, limit, type) { accessType: '', startTime: '', endTime: '', - devTypeCode : '' + devTypeCode: '' }; } obj = { @@ -157,49 +157,35 @@ function reloadData() { pages(pageNum, limitSize); } -// 新增/修改平台用户 -function addData(id) { - let title = '新增白名单' - if (id) { - title = '修改白名单'; - } +// 审核数据 +function auditData(id, status, btnName) { + let title = btnName let param = { - 'id': id + 'id': id, + 'status':status } - openIframe2("addOrEditWhite", title, "child/whiteForm.html", '875px', '625px', param); + openIframe3("auditData", title, "child/auditData.html", '1500px', '800px', param); } -function addPwdData(id) { - let param = { - 'id': id +const data = { + administrators1: '审阅', + administrators2: '审核', + administrators3: '审批', + experimentalTeamLeader1: '审阅', + technicalDirector2: '审核', + centerManager3: '审批' +}; + +function getValueByKey(obj, key) { + return obj[key]; +} + +/**设置审核类型*/ +function setButtonName(id, value, status) { + let cent = ""; + const btnName = getValueByKey(data, value + status) + if (btnName) { + cent += "" + btnName + ""; } - openIframe2("addOrEditWhite", '密码规则配置', "child/pwdRuleForm.html", '875px', '625px', param); -} - -/*删除白名单*/ -function delData(id) { - layer.confirm("确定删除吗?", { - move: false - }, function () { - let loadingMsg = layer.msg('数据删除中,请稍候...', {icon: 16, scrollbar: false, time: 0}); - let url = dataUrl + "/sys/white/delWhite" - let obj = {'id': id} - let params = { - encryptedData: encryptCBC(JSON.stringify(obj)) - } - ajaxRequest(url, "POST", params, true, function () { - }, function (result) { - layer.close(loadingMsg); // 关闭提示层 - if (result.status === 200) { - parent.layer.msg(result.msg, {icon: 1}) - query() - } else if (result.status === 500) { - layer.alert(result.msg, {icon: 2}) - } - }, function (xhr) { - layer.close(loadingMsg); // 关闭提示层 - error(xhr) - }); - }) -} - + return cent; +} \ No newline at end of file diff --git a/src/main/resources/static/js/openIframe.js b/src/main/resources/static/js/openIframe.js index f21bc12..3e8851f 100644 --- a/src/main/resources/static/js/openIframe.js +++ b/src/main/resources/static/js/openIframe.js @@ -49,13 +49,18 @@ function openIframe3(id, title, content, width, height, params) { title: ['
' + title + '
', 'font-size:16px;background-color:#f0f0f0;display: flex;align-items: center;'], content: content, shade: 0.3, - closeBtn: false, + closeBtn: true, shadeClose: false, area: [width, height], move: false, success: function () { let iframeWin = window["layui-layer-iframe" + layerIndex]; iframeWin.setParams(JSON.stringify(params)); + }, + end:function (){ + if(id === 'auditData'){ + window.reloadData(); + } } }); } diff --git a/src/main/resources/static/pages/basis/child/auditData.html b/src/main/resources/static/pages/basis/child/auditData.html new file mode 100644 index 0000000..e95f9d1 --- /dev/null +++ b/src/main/resources/static/pages/basis/child/auditData.html @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + 试验数据-审阅/审核/审批 + + +
+ +
+
+
+
+
+ + + + + \ No newline at end of file